一、问题
使用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进程写入命令 }
标签:坑记,IIS,--,Selenium,chromedriver,process,new,日志,options From: https://www.cnblogs.com/NewInfo/p/17607654.html