运行 selenium 后窗口持续关闭

irlmq6kh  于 2022-12-04  发布在  其他
关注(0)|答案(4)|浏览(198)

每次我运行这个代码时,窗口打开空白,然后加载所需的页面约1秒,然后关闭。

from selenium import webdriver

driver = webdriver.Chrome('C:/Users/*****/Downloads/chromedriver_win32/chromedriver.exe')
driver.get("https://stackoverflow.com/")

一个错误出现了一次或两次,说[268:10204:0208/163438.782:ERROR:broker_win.cc(55)] Error reading broker pipe: The pipe has been ended. (0x6D),但它只是有时出现,即使代码没有改变。
有什么建议吗?

6ie5vjzr

6ie5vjzr1#

此错误消息...

ERROR:broker_win.cc(55)] Error reading broker pipe: The pipe has been ended. (0x6D)

...表示管道已断开,就像浏览器端已关闭一样。
此错误在Chromium代码库的broker_win.cc中定义如下:

Channel::MessagePtr WaitForBrokerMessage(PlatformHandle platform_handle,
                     BrokerMessageType expected_type) {
  char buffer[kMaxBrokerMessageSize];
  DWORD bytes_read = 0;
  BOOL result = ::ReadFile(platform_handle.handle, buffer,
               kMaxBrokerMessageSize, &bytes_read, nullptr);
  if (!result) {
    // The pipe may be broken if the browser side has been closed, e.g. during
    // browser shutdown. In that case the ReadFile call will fail and we
    // shouldn't continue waiting.
    PLOG(ERROR) << "Error reading broker pipe";
    return nullptr;
  }

您看到此错误的主要原因是检测到由ChromeDriver控制的 Chrome 浏览器,导航被阻止。

溶液

作为一种解决方案,您可能需要使用某些配置来配置 ChromeDriver / Chrome,以便不会检测到Selenium驱动的 *Chrome浏览上下文 *。

参考

您可以在以下位置找到相关的详细讨论:

  • Selenium Web驱动程序:修改navigator.webdriver标志以防止 selenium 检测
  • 是否有一种方法可以使用Selenium WebDriver而不通知文档它是由WebDriver控制的?

tl; dr

断管错误 selenium webdriver,当命令之间有间隙?

wydwbb8l

wydwbb8l2#

我正在使用放在C:\Windows中的ChromeDriver 81.0.4044.138,这是为我工作的

from selenium import webdriver

class Stackoverflow(object):
    def __init__(self):
        self.options = webdriver.ChromeOptions() 
        self.options.add_experimental_option('useAutomationExtension', False)
        self.options.add_experimental_option("excludeSwitches", ["enable-automation"])
        self.driver = webdriver.Chrome(options=self.options)
        self.driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
          "source": """
            Object.defineProperty(navigator, 'webdriver', {
              get: () => undefined
            })
          """
        })
        self.driver.execute_cdp_cmd("Network.enable", {})
        self.driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browser"}})
        self.driver.get("https://www.stackoverflow.com/")

if __name__ == '__main__':
    Stackoverflow()
b91juud3

b91juud33#

最好的解决方法之一是设置Sleep(),这样浏览器就不会关闭:

import time 

driver.get('https://www.google.com')
time.sleep(3000)  #this makes browser not to close.

附加阅读https://selenium-python.readthedocs.io/waits.html

polkgigr

polkgigr4#

如果你想让你的代码保持打开你的浏览器窗口,那么你可以做以下我在这篇文章中提到的:Chrome browser closes immediately after loading from selenium

如果你觉得这很有效,就把它标记为有用

谢谢您
苏汉卡尔·查克拉博蒂

相关问题