.NetCore + Selenium IIS 部署踩坑記

一、問題 

    使用Selenium+chromedriver開發自動操作頁面demo,本地調試使用IIS Express正常,
部署到IIS 訪問接口代碼正常執行,但是,但是頁面並沒有啓動

二、排查

   網上找相似情況大概以下幾種

  1,chromedriver和chrome 的版本不一致
  2,IIS用戶權限
  3,代碼寫法問題

  本地可以正常啓動版本-----排除,
  重新設置IIS站點權限還是無法啓動---排除

三、誤區與轉機

  本次排查過程中一大誤區:本地可以運行=代碼沒有問題;

  換一個方向;查看chromedriver和selenium官網看看這兩個玩意的詳細參數

  ChromeDriver官網:https://chromedriver.chromium.org/security-considerations

      這個文章詳細說明ChromeDriver 只允許本地連接。如果您需要從遠程主機連接到它,請在命令行上使用 --allowed-ips 開關來指定允許連接到 ChromeDrive 的 IP 地址列表。  

 首先:在CMD中執行,chromedriver.exe --port=8012 --whitelisted-ips="127.0.0.1" 設置白名單的地址和端口號
 然後IWebDriver 使用RemoteWebDriver進行實例
 ChromeOptions options = new ChromeOptions();
 options.BinaryLocation = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
 options.AddArgument("--start-maximized");
 IWebDriver driver = new RemoteWebDriver(new Uri("http://127.0.0.1:8012"), options);
 注意:

1,ChromeDriver很多版本參數命名不太一樣,上面那個命令不一定好使,建議使用 chromedriver.exe --h 查看所有參數
 本次版本參數如下:  

--port=要偵聽的port端口

--adb端口=端口adb服務器端口

--log path=FILE將服務器日誌寫入文件而不是stderr,將日誌級別增加到INFO

--log level=level設置日誌級別:ALL、DEBUG、INFO、WARNING、SEVERE、OFF

--verbose日誌verbosely(相當於--log level=ALL)

--無提示日誌(相當於--log level=OFF)

--追加日誌追加日誌文件而不是重寫

--可重放的(實驗性的)日誌,並且不要截斷長字符串,以便可以重放日誌。

--version打印版本號並退出

--url base命令的基本url路徑前綴,例如wd/url

--可讀時間戳將可讀時間戳添加到日誌

--enablechrome日誌顯示瀏覽器中的日誌(覆蓋其他日誌記錄選項)

--allowed ips=LIST允許連接到ChromeDriver的遠程IP地址的逗號分隔的allowelist

--allowed-origins=LIST允許連接到ChromeDriver的請求來源的逗號分隔的allowlist。使用“*”允許任何主機來源都是危險的!


2,注意設置了白名單後不要關閉CMD命令窗口

3,注意白名單端口不要衝突且不要使用ChromeDriver 默認的端口
 執行 chromedriver.exe --h 後可以看到端口

 

四、關鍵代碼

 

        /// <summary>
        /// 初始化驅動器
        /// </summary>
        /// <param name="driver"></param>
        public static IWebDriver Init(this IWebDriver driver)
        {
            if (driver == null)
            {
                InitProcess();
                ChromeOptions options = new ChromeOptions();
                options.BinaryLocation = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
                options.AddArgument("--start-maximized");
                driver = new RemoteWebDriver(new Uri("http://127.0.0.1:8012"), options);
            }            
            return driver;
        }

        /// <summary>
        /// 初始化端口和IP白名單
        /// </summary>
        private static void InitProcess()
        {
            var name = "cmd.exe";
            var process = new Process(); // 創建一個Process類對象
            process.StartInfo.FileName = name; // 設置進程的可執行文件
            process.StartInfo.UseShellExecute = false; // 是否使用操作系統shell啓動進程
            process.StartInfo.CreateNoWindow = true; // 是否在新窗口中啓動進程
            process.StartInfo.RedirectStandardInput = true; // 是否重定向輸入
            process.StartInfo.RedirectStandardOutput = true; // 是否重定向輸出
            process.StartInfo.RedirectStandardError = true; // 是否重定向錯誤輸出
            process.StartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8; // 輸出編碼方式
            process.Start(); // 啓動進程
            process.StandardInput.WriteLine("chromedriver.exe --port=8012 --whitelisted-ips=\"127.0.0.1\""); // 向CMD進程寫入命令
        }

 



 

 


  

 

 

 


  

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章