【问题标题】:selenium webdriver BrokenPipeError (timeout issue)selenium webdriver BrokenPipeError(超时问题)
【发布时间】:2023-03-29 02:55:01
【问题描述】:

我将我的代码归结为以下内容:

from selenium import webdriver
from time import sleep
b = webdriver.Firefox()
sleep(10)
b.get('http://www.google.com')

这会导致 b.get 调用出现 BrokenPipeError。这是我的环境错误吗?我做错了什么,还是错误?

环境:

  • Fedora 27(64 位)
  • Firefox Quantum 59.0.2(64 位)
  • Python 3.6.5
  • 硒 3.13.0(通过 pip)
  • 来自 github 的 geckodriver v0.21.0

更新: 我升级了我的工作站,并将其移至 Fedora 28,并安装了全新的 Firefox 61、Python 3.6.5、Selenium 3.13.0 和 geckodriver 0.21.0,但提供的脚本也存在同样的问题。

【问题讨论】:

  • 我认为 geckodriver 适用于 FF 47+ 而不是以下。你的 FF 很老了。
  • @demouser123 我忘了包含我的 Firefox 版本。我已经在上面添加了。我使用版本 59.0.2
  • 另外请更新 Selenium。版本3.1.3 很旧了。
  • 它是 Selenium 版本 3.13.0(根据 pypi.org/project/selenium 提供的最新版本)

标签: python python-3.x selenium-webdriver


【解决方案1】:

需要指定webdriver.exe文件的路径 首先指定 path ='你的 webdriver.exe 的路径'

path ='path of your webdriver.exe'
and then b = webdriver.Firefox(path)

【讨论】:

  • 不一定。如果您已将 webdriver 的位置添加到系统/用户路径中,则在调用浏览器时无需指定它。
  • 它在路径中并打开。只是如果发送的命令有延迟,管道就会中断。如果命令尽快执行,则管道不会中断。我的原始代码在要求输入之前加载了几页,如果响应中有任何延迟,管道就会中断。在测试中,我将其归结为问题中包含的代码
【解决方案2】:

我使用这个方法来解决这个问题,每次有超时风险时我都会调用它。我希望有一个更好的解决方案,但这对我现在有效。

def refresh(b):
    try: 
        b.refresh()
    except BrokenPipeError:
        pass

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2013-02-28
    • 2011-12-14
    相关资源
    最近更新 更多