多个使用 Selenium 的 Chrome 实例:在实例 2 中运行 driver.close/quit 时,实例 1 中出现"Closing stream with result -2"错误



我正在为以下场景运行BeautifulSoup和Selenium的组合:

  1. 使用Selenium打开Web驱动程序(Chrome(,等待命令
  2. BeautifulSoup在后台无限循环,每隔几秒钟检查一次网站的变化
  3. 如果检测到某个更改,请使用Selenium打开/加载网站,然后单击几个按钮来呈现我想要抓取的内容

我正在跟踪两个不同网站上的更改。我可以在同一个脚本中测试这两个网站,但我需要尽快跟踪更改。因此,我还在脚本开始时打开Selenium,以在检测到更改之前节省时间,这样我就不必等到检测到更改后Chrome第一次启动。

我需要我的Chrome默认配置文件的cookie来访问网站(双因素登录(,所以我复制了我的用户数据文件夹来加载两个Chrome会话。如果我不这样做,我会在第二个实例中得到一个错误,说配置文件正在使用中,无法编辑文件yada yada。。。

打开一个实例/列表/网站很好,我的脚本运行时没有任何问题。当我打开该脚本的第二个实例,在Chrome的新窗口中检查不同的网站时,每当第二个脚本启动driver.close((或driver.quit((时,第一个脚本都会给我以下错误。

[22384:16640:0909/170836.278:ERROR:socket_stream.cc(219)] Closing stream with result -2

这并没有关闭我的第一个脚本,它似乎一直运行良好。所以我甚至不认为这对我试图做的事情有任何不利影响,但我想知道这里发生了什么,为什么这两个实例看起来相互作用,而实际上它们不应该相互作用?

我也为每个脚本使用两个不同的chromedriver.exe副本,甚至不确定是否有必要。

不管怎样,如果有人能告诉我发生了什么,我将不胜感激。

此错误消息。。。

ERROR:socket_stream.cc(219)] Closing stream with result -2

意味着ChromeDriver在调用CloseStream()时出错。

此错误来自socket_stream.cc中定义的void SocketInputStream::CloseStream()函数,该函数定义为:

void SocketInputStream::CloseStream(net::Error error,
const base::Closure& callback) {
DCHECK_LT(error, net::ERR_IO_PENDING);
ResetInternal();
last_error_ = error;
LOG(ERROR) << "Closing stream with result " << error;
if (!callback.is_null())
callback.Run();
}

最新更新