Selenium ChromeDriver卡住了?

12

我有一个长时间运行的python应用程序,会定期(每30-60秒)使用selenium和chrome驱动程序打开一个网页,运行一些javascript代码并截取屏幕截图。它在一个带有Xvfb Chrome的EC2 Ubuntu实例上运行,大部分情况下都可以工作,但是偶尔程序会挂起。问题发生在以下几行代码中之一:

    options = Options()
    options.add_argument("--disable-web-security")
    options.add_argument("--webdriver-logfile=webdrive.log")
    dc = DesiredCapabilities.CHROME
    dc['loggingPrefs'] = {'browser': 'ALL'}
    driver = webdriver.Chrome(chrome_options=options, desired_capabilities=dc)
    driver.get(url);

我没有确切的代码行号,但是从我放置的调试语句中得知问题出现在此处之间。

不幸的是,程序没有崩溃,所以它没有任何错误信息,只是自昨晚7点以来无限期地等待。运行 strace -p 'python program pid' 返回:wait4(-1, 运行 strace -p 'chromedriver pid' 返回 recvfrom(20,

我可以在 ps axjf 中看到该进程仍在运行,只是没有做任何事情。我有点茫然无措,现在有什么建议吗?

chromedriver 版本:2.10.267518

Google Chrome 40.0.2214.111

Selenium(使用 pip 安装):2.42.1

#https://github.com/cgoldberg/xvfbwrapper
xvfb = Xvfb(width=1920, height=1920)
xvfb.start()

---- 编辑 ----

我刚刚更新到 ChromeDriver 2.14.313457Selenium 2.44.0,希望这能解决问题。 我现在打算先保持不变。感谢大家到目前为止提供的建议!

---- 编辑 ----

服务最终仍然挂起了。 我想知道是否因为每次截图后我会关闭并重新启动google-chrome? 这可能会导致内存泄漏吗? 我该如何诊断这个问题?


1
如果没有指定Chrome选项,它会挂起吗?您使用的是哪个Selenium和Chrome版本? - alecxe
另外,尝试添加调试日志消息并查看它挂在哪一行。还要展示如何启动 xvfb。谢谢。 - alecxe
这几次出现问题时,我已经添加了调试信息,但我想我还不够彻底。 - Trevor
好的,首先要尝试的是将selenium升级到最新版本(目前为2.44)。 - alecxe
我认为Chromedriver是罪魁祸首。Chromedriver 2.10只支持Chrome版本36及以下。 - Richard
你是否停止过Xvfb?还是一直生成新的? - Corey Goldberg
3个回答

11

我遇到了类似的问题,并在这里找到了答案,并在这里进行了博客记录。将环境变量DBUS_SESSION_BUS_ADDRESS设置为/dev/null对我有用,无需一直重新启动Xvfb。


1
我从未找到导致此问题的具体代码,但每次加载驱动程序时创建一个新的Xvfb实例似乎已经解决了这个问题。也许selenium和Xvfb之间存在内存泄漏?无论如何,将其标记为关闭状态。

0
在我的情况下,将调用封装在with块中问题就消失了,像这样:
options = Options()
path = f"{os.environ['LOCALAPPDATA']}{os.path.sep}Programs{os.path.sep}Chromium{os.path.sep}Win_x64{os.path.sep}1012736{os.path.sep}"
options.binary_location = f"{path}chrome-win{os.path.sep}chrome.exe"
executable_path = f"{path}chromedriver_win32{os.path.sep}chromedriver.exe"
with webdriver.Chrome(chrome_options=options, executable_path=executable_path) as browser:
    browser.get("https://live.euronext.com/en/products/equities")
    sleep(3)

Selenium 4.4.0,Python 3.10,Windows 10,ChromeDriver 和 Chromium 104.0.5112.0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接