.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进程写入命令
        }

 



 

 


  

 

 

 


  

 

 

 

 

 

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