我创建了一个非常简单的C#项目来测试Selenium和Chrome驱动程序,但当我运行它时,它被卡在了第一行,即创建ChromeDriver对象。
我已经设置如下:
-
。NET Core 3.1控制台应用程序(也尝试过.NET 4.7(
-
已安装硒。WebDriver 3.141.0和Selenium。WebDriver。ChromeDriver 87.0.4280.8800。
-
我的Chrome版本是";版本87.0.4280.88(官方版本((64位(";。我已经仔细检查了与Chrome和ChromeDriver的兼容性。
-
代码:
using OpenQA.Selenium.Chrome;
namespace MyFirstSelenium
{
class Program
{
static void Main(string[] args)
{
ChromeDriver chrome = new ChromeDriver();
chrome.Navigate().GoToUrl("https://www.google.co.jp/");
}
}
}
可视演播室屏幕
chromedriver.exe
按预期复制到调试文件夹,所以我认为问题既不是兼容性也不是路径。
彩色打印机
当我运行代码时,结果是一个空窗口,地址栏中有"data"。没有引发错误。我搜索了几个小时,找到了一些文章,但大多数都是旧的,这些答案都没有成功。
感谢您的帮助。非常感谢。
添加chromedriver.exe详细控制台输出。
@Piotr M。彩色打印机控制台
日志文件https://drive.google.com/file/d/1ECOS8E55aaTFV63e8P-7n6uRVcf49PRN/view?usp=sharing
新代码当我第一次执行";chromedriver.exe--verbose--日志路径=chromedriver.log";,但如果没有它,它就会抛出WebDriverException。
OpenQA。硒。WebDriverException:"向URL localhost:9515/session的远程WebDriver服务器发送HTTP请求时,引发了响应为null的异常。异常的状态为未知错误,消息为:由于目标计算机主动拒绝,无法建立连接。由于目标计算机被动拒绝,无法进行连接。'
var chromeOptions = new ChromeOptions();
chromeOptions.BrowserVersion = "87";
IWebDriver driver = new RemoteWebDriver(new Uri("http://localhost:9515"), chromeOptions);
尝试此代码
ChromeOptions options =new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
options.addArguments("--disable notifications");
DesiredCapabilities cp=new DesiredCapabilities();
cp.setCapability(ChromeOptions.CAPABILITY, options);
options.merge(cp);
WebDriver driver=new ChromeDriver(options);
可能是循环冗余的经典情况。
chrome
是一个保留字,您可能需要将变量名更改为其他名称,例如chromex
。所以你的有效代码行是:
ChromeDriver chromex = new ChromeDriver();
额外考虑
还应考虑以下方面:
不要使用
ChromeDriver
类,而是使用IWebDriver
接口。IWebDriver driver = new ChromeDriver();
您需要通过
GoToUrl()
传递完整的url,而不是部分urlgoogle.co.jp/
,如下所示:driver.Navigate().GoToUrl(@"https://www.google.co.jp/");