Requests-html 导致 OSError: [Errno 8] 调用 html.render() 时执行格式错误

2024-05-05

我正在使用 requests-html 并尝试渲染功能,但收效甚微。当我使用 python3.8 运行这个脚本时

#!/usr/bin/python3
from requests_html import HTML
file = "scrape/temp_file2.html"
with open(file) as html_file:
   source = html_file.read()
   html = HTML(html=source)
   html.render()
   match = html.find('#footer', first=True)
   try:
      print(match.hmtl)
   except:
      print('not found')

它会产生回溯:

python3 scrape/test1.py
Traceback (most recent call last):
  File "scrape/test1.py", line 10, in <module>
    html.render()
  File "/home/pi/.local/lib/python3.8/site-packages/requests_html.py", line 586, in render
    self.browser = self.session.browser  # Automatically create a event loop and browser
  File "/home/pi/.local/lib/python3.8/site-packages/requests_html.py", line 730, in browser
    self._browser = self.loop.run_until_complete(super().browser)
  File "/usr/local/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/home/pi/.local/lib/python3.8/site-packages/requests_html.py", line 714, in browser
    self._browser = await pyppeteer.launch(ignoreHTTPSErrors=not(self.verify), headless=True, args=self.__browser_args)
  File "/home/pi/.local/lib/python3.8/site-packages/pyppeteer/launcher.py", line 306, in launch
    return await Launcher(options, **kwargs).launch()
  File "/home/pi/.local/lib/python3.8/site-packages/pyppeteer/launcher.py", line 147, in launch
    self.proc = subprocess.Popen(  # type: ignore
  File "/usr/local/lib/python3.8/subprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/local/lib/python3.8/subprocess.py", line 1702, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 8] Exec format error: '/home/pi/.local/share/pyppeteer/local-chromium/588429/chrome-linux/chrome'

chromium 文件是一个可执行文件:

ls -l /home/pi/.local/share/pyppeteer/local-chromium/588429/chrome-linux/chrome
-rwxr-xr-x 1 pi pi 214121928 Mar  9 17:21 /home/pi/.local/share/pyppeteer/local-chromium/588429/chrome-linux/chrome

如果我删除 html.render() 行,它可以正常工作(但不会渲染 javascript)。 有任何想法吗?


经过多次搜索我找到了解决方案。问题是 pyppeteer 在 32 位 ARM 处理器上安装 x86-64 版本的 chromium。下面的解决方案是从 Ubuntu 安装 chromium 文件并从 pyppeteer 目录链接到这些文件。从https://github.com/miyakogi/pyppeteer/issues/250 https://github.com/miyakogi/pyppeteer/issues/250:

install chromium-codecs-ffmpeg:
   https://launchpad.net/ubuntu/trusty/armhf/chromium-codecs-ffmpeg
   ➜ chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb
   sudo dpkg --force-all -i chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb

install chromium-browser:
   https://launchpad.net/ubuntu/trusty/armhf/chromium-browser
   ➜ chromium-browser_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb
   sudo dpkg --force-all -i chromium-browser_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb

其他注意事项:

  • 确保您下载的版本 >= 62。我使用过 65 版本,效果很好。
  • 首先使用以下命令安装 chromium-codecs-ffmpeg,然后安装 chromium-browser “dpkg --force-all -i”。
  • 从 Ubuntu 软件包安装 Chromium 后,通过运行“whereis chromium-browser”获取其路径
  • 最有可能的是,它将位于“/usr/bin/chromium-browser”上。
  • 进入 pyppeteer 下载 x86 Chromium 的目录。
  • 在你的情况下它是“/home/pi/.local/share/pyppeteer/local-chromium/588429/chrome-linux/”。
  • 删除其所有文件。
  • 在同一目录中。创建一个名为“chrome”的符号链接并指向 Ubuntu 的 Chromium(您已在步骤 3 中获得了其路径)。
  • 例如: ln -s /usr/bin/chromium-browser chrome
  • 执行这些步骤后,一切都应该正常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Requests-html 导致 OSError: [Errno 8] 调用 html.render() 时执行格式错误 的相关文章

随机推荐

  • Windows Phone 7 浏览器 - 单击链接时关闭灰色阴影

    使用 Windows Phone 7 浏览器 当用户单击链接时 该链接会显示一个灰色矩形阴影大约 0 5 秒 一般来说 这很好 但是 如果您有动态页面行为 例如 单击链接会更新 DOM 以便该链接不再可见 则在链接本身消失后 不透明的灰色矩
  • JavaScript:字符串连接性能低下? Array.join('')?

    我读过如果我有一个for循环 我不应该使用字符串连接 因为它很慢 例如 for i 0 i lt 10000000 i str a 相反 我应该使用Array join 因为它更快 var tmp for i 0 i lt 10000000
  • 在 Visual Studio 2010 DBML 设计器 (MS SQL/ASP.NET MVC) 中默认设置 UpdateCheck.Never 模式

    在我的网络应用程序中 我做了很多更新 因此 除主键之外的所有列唯一可接受的 UpdateCheck 模式是 NEVER 但不幸的是 DBML 设计器自动设置 ALWAYS 模式 因此 我必须手动更改数十列 并且当我必须更新 DBML 文件时
  • GIT Rebase 对多个 0.5GB 二进制文件致命

    这个问题本质上是重新开rebase 期间 git 崩溃 https stackoverflow com q 7692944 1286639从来没有答案 我正在尝试从我的 secc 分支进行变基 git rebase main First r
  • int 到 long 赋值

    我一直在尝试这个 int 和 long 转换 我尝试分配一个int变量为along多变的 代码如下 public static void main String args int i 1024 long j i long k i i i i
  • 如何使用 cURL(或任何命令行工具)通过 OAuth 身份验证将 HTTP Post 发送到 Twitter?

    我希望使用命令行应用程序 例如cURL http en wikipedia org wiki CURL cURL 在我的测试 Twitter 帐户上发布一些测试帖子 我也希望通过 OAuth 身份验证来做到这一点 我怎样才能做到这一点 假设
  • Azure 存储上的连接池

    我开始使用 Azure 存储将文件保存到应用程序上的 blob 由于我的应用程序可能访问不同存储上的不同容器 我想知道如何实现一个可以优化资源的连接池 我想保持对不同容器的连接打开 而不是每次尝试下载 blob 时都打开连接 谁能为我提供实
  • R:函数中使用的 ggplot2 未反映字体大小变量的变化

    我经常需要将多个不同大小的相同 ggplot2 图表输出到 png 文件 通过使用输出高度和宽度 以像素为单位 的变量 可以轻松生成每个 png 文件的大小 对于 ggplot2 部分 我使用字体大小和某些其他元素的变量 并设置一个简单的循
  • 从网站保存嵌入的 pdf

    我正在编写一个小型 C 应用程序来管理供应商提供的 化学品 安全数据表 目前 我手动搜索该化学品并保存 pdf 并在我的程序中添加指向 pdf 的链接 问题是我还有很多化学品需要处理 所以最好将过程自动化 例如 化学品的部件号如下 2710
  • 如何使用 OpenCV 检测图像帧中的对象?

    我正在使用 Raspberry Pi 开发一个漫游器 它将清扫房间并捡起掉落在地上的物体 为了检测物体 我使用了在流动站操作开始时拍摄的参考图像 以及每 10 秒单击一次的图像 新图像 为了确定图像帧是否发生变化 我在参考图像和新图像之间进
  • 我应该在查询时调用 ToListAsync()

    不久前 我开始接触 C 并正在寻找一些如何编写代码的最佳实践 现在 我正在使用 EF Core 并具有以下代码 var details dbContext Details Where x gt x Name Button foreach v
  • CDI/Weld - 结束对话后如何处理浏览器页面刷新?

    在使用 CDI 的早期 我导航到一个长时间运行的页面 使用 faces redirect true 进行对话 因此我有一个类似 myPage xhtml cid 1 的 URL 在某个时刻我结束了谈话 我的意思是这必须是合理的事情 或者你也
  • 通过 IoC 容器实例化 WCF 服务

    是否可以使 WCF 运行时通过 IoC 容器而不是通过其通常的进程来实例化服务 此外 考虑到容器的类型生活方式配置与服务的 InstanceContextBehavior 之间存在潜在冲突 这种方法会是一个糟糕的主意吗 我知道我可能完全问错
  • 在 WordPress 页面上嵌入 swf

    我正在尝试将 swf 嵌入到 WordPress 页面中 这听起来很简单 但它不起作用 我不明白为什么 我已将所有相关文件上传到服务器上 并且我相当确定所有文件路径都是正确的 包含 fla 和 swf 文件的文件夹还包含一个 index h
  • 如何在 Xcode 7 beta 4 中调用 SecItemCopyMatching?

    在使用 Swift 的 Xcode 6 和 7 的早期版本中 以下语法可以使用 var secureItemValue Unmanaged
  • 在 JavaScript onClick 事件处理程序中转义双引号

    下面的简单代码块可以在静态 HTML 页面中提供 但会导致 JavaScript 错误 您应该如何转义中嵌入的双引号onClick处理程序 即 xyz 请注意 HTML 是通过从数据库中提取数据动态生成的 其中的数据是其他可能带有单引号或双
  • 从列表中的每个项目的支持 bean 方法中设置 itemDisabled

    我有一个单选按钮列表 并且想根据支持 bean 方法的结果禁用某些项目
  • 如何检查 firebase 中是否存在孩子? [复制]

    这个问题在这里已经有答案了 我有一个 firebase 它有一个名为 users 的节点 用户给出一个用户名 我想检查该用户名是否已作为用户节点的子节点存在 这是我目前正在尝试的代码 平台是安卓 String myUsername user
  • 如何更改 Kotlin 上生成的 TODO() 函数体?

    我需要在我的代码上留下一些稍后要做的事情TODO 自动生成的会产生一个很长的评论 如下所示 TODO not implemented To change body of created functions use File Settings
  • Requests-html 导致 OSError: [Errno 8] 调用 html.render() 时执行格式错误

    我正在使用 requests html 并尝试渲染功能 但收效甚微 当我使用 python3 8 运行这个脚本时 usr bin python3 from requests html import HTML file scrape temp