Python/Firefox 无头抓取脚本中的“无法解码来自木偶的响应”消息

2024-03-01

美好的一天,我在这里和谷歌上进行了大量搜索,但尚未找到解决此问题的解决方案。

场景是:

我有一个 Python 脚本 (2.7),它循环访问多个 URL(例如,想想亚马逊页面、抓取评论)。每个页面都有相同的 HTML 布局,只是抓取不同的信息。我将 Selenium 与无头浏览器一起使用,因为这些页面具有需要执行以获取信息的 JavaScript。

我在本地计算机 (OSX 10.10) 上运行此脚本。 Firefox 是最新的 v59. Selenium 的版本为 3.11.0,使用 geckodriver v0.20。

该脚本在本地没有问题,它可以运行所有 URL 并毫无问题地抓取页面。

现在,当我将脚本放在我的服务器上时,唯一的区别是它是 Ubuntu 16.04(32 位)。我使用适当的 geckodriver(仍然是 v0.20),但其他一切都是相同的(Python 2.7、Selenium 3.11)。它似乎会随机崩溃无头浏览器,然后所有的browserObjt.get('url...')不再工作了。

错误消息说:

消息:无法解码来自木偶的响应

对页面的任何进一步的 selenium 请求都会返回错误:

消息:尝试在未建立连接的情况下运行命令


显示一些代码:

当我创建驱动程序时:

    options = Options()
    options.set_headless(headless=True)

    driver = webdriver.Firefox(
        firefox_options=options,
        executable_path=config.GECKODRIVER
    )

driver作为参数传递给脚本的函数browserObj然后用于调用特定页面,加载后将其传递给 BeautifulSoup 进行解析:

browserObj.get(url)

soup = BeautifulSoup(browserObj.page_source, 'lxml')

该错误可能指向导致浏览器崩溃的 BeautifulSoup 行。

可能是什么原因造成的?我可以采取什么措施来解决该问题?


编辑:添加指向同一事物的堆栈跟踪:

Traceback (most recent call last):
  File "main.py", line 164, in <module>
    getLeague
  File "/home/ps/dataparsing/XXX/yyy.py", line 48, in BBB
    soup = BeautifulSoup(browserObj.page_source, 'lxml')
  File "/home/ps/AAA/projenv/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 670, in page_source
    return self.execute(Command.GET_PAGE_SOURCE)['value']
  File "/home/ps/AAA/projenv/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "/home/ps/AAA/projenv/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
WebDriverException: Message: Failed to decode response from marionette

注意:此脚本用于 Chrome。因为服务器是32位服务器,所以我只能使用chromedriver v0.33,它只支持Chrome v60-62。目前 Chrome 是 v65,在 DigitalOcean 上我似乎没有一种简单的方法可以恢复到旧版本 - 这就是我坚持使用 Firefox 的原因。


对于在 Docker 容器中运行 selenium webdriver 时遇到此问题的其他人,将容器大小增加到 2GB https://github.com/SeleniumHQ/docker-selenium/pull/485/files#diff-04c6e90faac2675aa89e2176d2eec7d8R43 fixes 这个问题 https://bugzilla.mozilla.org/show_bug.cgi?id=1338771#c10.

我想如果 OP 通过将服务器 RAM 升级到 2Gb 来解决问题,这也会影响物理机,但这可能是巧合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python/Firefox 无头抓取脚本中的“无法解码来自木偶的响应”消息 的相关文章

随机推荐

  • Typescript 1.5 中的“var”和“let”

    使用 之间到底有什么区别var or let 在打字稿中 我知道 let 允许将变量进一步定义到某个范围内 而无需在该范围之外使用它 对于 for 循环中的迭代器来说 这显然是一个很好的优势 我知道这是 ES6 定义 因此编译到 ES6 在
  • JavaScript 中的守护线程

    我有一个程序 它使用 getJSON 从服务器获取 JSON 并处理该数据并将其呈现给用户 但服务器上的数据会经常更新 如何每 5 分钟获取新的 JSON 并将其显示给用户并在后台线程中执行 我可以为此使用 setTimeout 吗 谢谢
  • 如何设计可测试性代码

    我一直在考虑在我未来创建的任何项目中使用 TDD 并实施适当的测试 才刚刚开始了解它如何使您的生活变得更好 因此 在过去的几天里 我一直在 SO 上徘徊 试图了解如何设计可测试性的应用程序 但我似乎仍然在努力解决一些想法 我读过很多你应该编
  • FragmentActivity:无法从 Fragment 转换为派生类

    我正在尝试在 FragmentActivity 中使用 Fragment 如下所示 TutViewerFragment viewer TutViewerFragment getSupportFragmentManager findFragm
  • 如何在 Visual Studio 2010 中将 .cs 文件折叠到 .xaml 文件内?

    如何将我的 ViewModel 文件 cs 文件 折叠到其相应的 View 文件 xaml 文件 文件中 如图所示 我不知道在 Visual Studio 中执行此操作的方法 但您可以在文本编辑器中编辑 csproj 文件 你应该找到这样的
  • 以编程方式快速获取图像文件类型

    我正在从解析中下载带有 PNG 和 JPEG 文件的图像 当图像下载到应用程序时 我需要确定文件类型是什么 以便我可以相应地处理图像 查看了 uiimageview 的 API 并进行了搜索 但无法在 swift 中找到任何解决方案 任何意
  • 具有多个键和关联值的可编码枚举

    我已经看到了有关当所有情况都有关联值时如何使枚举符合 Codable 的答案 但我不清楚如何混合具有和不具有关联值的情况的枚举 如何针对给定情况使用同一密钥的多个变体 如何对没有关联值的情况进行编码 解码 enum EmployeeClas
  • 使用属性调用方法

    我有各种单独的方法 它们都需要执行相同的功能 然后才能继续自己的实现 现在我可以在每个方法中实现这些功能 但我想知道是否有一种方法可以利用attributes去做这个 作为一个非常简单的示例 所有网络调用都必须检查网络连接 public v
  • 即使我清除缓存,.gitignore 也不起作用

    在将初始提交推送到 git 存储库后 我犯了创建 gitignore 文件的错误 我的 gitignore 非常简单 它只包含 node modules 我尝试过以下方法 git rm cached rf git add git commi
  • 如何将按“Enter”键与单击按钮关联起来?

    在我的 swing 程序中 我有一个 JTextField 和一个 JButton 我希望 一旦用户按下 enter 键 JButton 的 actionListener 就会运行 我该怎么做 提前致谢 JRootPane 有一个方法 se
  • Python - 列表字典

    制作列表字典的最佳方法是什么 例如 如果我有列表列表1 列表2并想做一本字典my dict像那样 my dict list1 list1 list2 list2 我发现了this https stackoverflow com questi
  • docker-compose up 不重新创建容器

    我创建了两个容器 一个是 oracle db 一个是 apache tomcat 我使用以下 docker compose 运行它们 version 3 4 services tomcat build tomcat ports 8888 8
  • 运行 StarTeam 2008 Release 2 客户端时出现“无法创建 Java 虚拟机”错误

    为什么 StarTeam 2008 Release 2 Client 没有在我的计算机上正确安装 每当我尝试启动它时 都会收到 无法创建 Java 虚拟机 错误 正如我之前所想 这不是定位 Java 虚拟机的问题 而是内存分配问题 在 St
  • Facebook 聊天机器人 - 如何测试欢迎消息?

    我的聊天机器人运行良好 但我在调试欢迎消息功能时遇到了麻烦 因为它仅在发起对话时显示 尽管我很确定在同事手机上尝试过它不起作用 如何重置我的聊天 以便将我视为与之交互的新用户 这是我目前受欢迎的 PHP 脚本
  • 如果使用 Android 后台服务,Flutter 会停留在“等待观测站端口可用”

    我一直在尝试为 Flutter 编写平台代码来启动后台服务 在这里 我使用了一个最小的例子 没有actual所做的工作表明该应用程序根本无法运行 实际的flutter代码根本没有修改 MainActivity java public cla
  • AnyLogic 计算机处理器需要建议 - 单核速度与核心数量?

    我在一台老式电脑上进行建模 最近获得了一些实验室资金来购买一台新的建模计算机 处理器的选择让我感到困惑 为了获得最佳的 AnyLogic 仿真建模 我应该专注于最大化单核速度还是最大化处理器核心数量 另外 高端显卡有帮助吗 我从我的工程同事
  • 如何使用 Java 或 CMD 获取 PC 硬件信息

    我正在创建一个 Java 桌面应用程序 用于报告 Windows 计算机 XP Vista 和 W7 的性能和统计信息 使用 Java 或命令行如何获取以下信息 制造商 戴尔 惠普 模数 处理器类型 处理器尺寸 系统类型 储存空间 内存总计
  • Android - 使滑动抽屉从左向右滑动

    我已经使用下面的 XML 布局在我的应用程序中实现了 滑动抽屉 我从 androidpeople com 得到这个例子
  • 使用 C# 识别 CPU 架构类型

    我想检查用户运行的是哪个CPU架构 是吗 i386 或 X64 或 AMD64 我想用 C 来做 我知道我可以尝试 WMI 或注册表 除了这两种还有其他办法吗 我的项目目标是 NET 2 0 让我来到这里的是检查 32 位与 64 位操作系
  • Python/Firefox 无头抓取脚本中的“无法解码来自木偶的响应”消息

    美好的一天 我在这里和谷歌上进行了大量搜索 但尚未找到解决此问题的解决方案 场景是 我有一个 Python 脚本 2 7 它循环访问多个 URL 例如 想想亚马逊页面 抓取评论 每个页面都有相同的 HTML 布局 只是抓取不同的信息 我将