我是新 selenium 和我试图建立一个机器人做一些逻辑上的一个特定的网站。我使用C#. NET 4.6, chrome v.108和最新的 selenium 和 chrome 驱动程序从Nuget。流程本身可以不到几秒钟,如果它失败了,我希望它再试一次,直到它会完成它。
可能,它可以运行很多小时(甚至一两天),直到它将成功。然而,在一两个小时后,它开始抛出很多异常,最常见的是以下三个:
disconnected: Unable to receive message from renderer
(failed to check if window was closed: disconnected: Unable to receive message from renderer)
(Session info: headless chrome=108.0.5359.125)*
An unknown exception was encountered sending an HTTP request to the remote WebDriver server for URL ___localhostURL___ The exception message was: An error occurred while sending the request.
The HTTP request to the remote WebDriver server for URL ___localhostURL___ timed out after 60 seconds.
我试着运行我的机器人,既在我的机器上,也在 Docker 上,过了一段时间我得到了同样的错误。
我在网上搜索这些错误,并尝试了一些解决方案(其中大多数是添加一些参数到ChromeOptions),但实际上他们没有帮助我这么多,我仍然得到这些错误。
这是我的代码:
private void Func()
{
var status = Status.Failed;
ChromeDriver driver = null;
var options = new ChromeOptions();
options.AddArgument("--headless");
options.AddArgument("--user-agent='Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 640 XL LTE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10166'");
options.AddArgument("--no-sandbox");
options.AddArgument("--disable-gpu");
options.AddArgument("--disable-dev-shm-usage");
driver = new ChromeDriver(path/to/chromedrive.exe, options);
//driver = new RemoteWebDriver(new Uri(dockerUrl), options);
do
{
try
{
driver.Navigate().GoToUrl(PageUrl);
status = Func2(driver);
}
catch (Exception ex)
{
WriteException(ex);
}
} while (status == Status.Failed);
driver?.Quit();
}
- 用户代理的说法是因为特定的网站屏蔽了无头浏览器,这就是我如何发现如何绕过这个屏蔽的。
- 所有其他的论点是一个解决方案,我发现,以解决上述问题,并没有帮助这么多。
- 我知道我可以在每次迭代时使用
driver.Navigate().Refresh();
而不是driver.Navigate().GoToUrl(PageUrl);
,但是使用Refresh()时,它并没有做我想要做的事情,因为它刷新的是当前页面,而不是主页面。 - 使用
RemoteWebDriver
(将在Docker上运行机器人)和ChromeDriver
时,我都会得到相同的错误。 - 我尝试没有路径chromedriver.exe(实际上我不知道我需要这一个在所有,因为它的工作原理一样,没有它),但无论有或没有路径chromedriver.exe它仍然得到这些错误。
- 这些错误在
GoToUrl
行上出现
有什么见解或提示要更改什么或检查什么来解决我的问题吗?
谢啦,谢啦
1条答案
按热度按时间vc9ivgsu1#
显然,这一切都是因为我的笔记本电脑睡眠模式。
当我把它改为“从来没有”,它似乎固定和运行超过24小时,没有任何问题。