这是我试图实现的目标:我有一个带有 Pimoroni Inky Frame 的 Raspberry Pi 4。我想将其用于赞助活动(Tour for Life)以显示最近的赠款金额。 此赠品金额可在此页面上找到:https://www.tourforlife.nl/de-rollende-rijders
在我的 Macbook 上,我使用了带有 requests-html 的 Python 代码来抓取网站并获取 Gifted-Amount 类。所以刮擦有效。
然后我将代码带到我的 Raspberry Pi,然后问题就开始了。
这是我的 Python 代码片段:
import requests
from bs4 import BeautifulSoup
from requests_html import HTMLSession
from PIL import Image, ImageFont, ImageDraw
def get_donation_amount():
""" Get the donation amount from the Tour for Life website
Returns:
float: The donation amount
"""
url = "https://www.tourforlife.nl/de-rollende-rijders"
session = HTMLSession()
response = session.get(url)
response.html.render()
gift_amount = response.html.find('.gift-amount')[0].text
# remove euro sign and convert to float
gift_amount = float(gift_amount[2:].replace(",", "."))
return gift_amount
这就是输出:
python3 pidonationtracker.py
[INFO] Starting Chromium download.
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 183M/183M [00:17<00:00, 10.4Mb/s]
[INFO] Beginning extraction
[INFO] Chromium extracted to: /home/inky3/.local/share/pyppeteer/local-chromium/1181205
Traceback (most recent call last):
File "/home/inky3/PythonProjects/pidonationtracker/src/pidonationtracker/pidonationtracker.py", line 59, in <module>
donation_amount = get_donation_amount()
File "/home/inky3/PythonProjects/pidonationtracker/src/pidonationtracker/pidonationtracker.py", line 23, in get_donation_amount
response.html.render()
File "/home/inky3/PythonProjects/pidonationtracker/.venv/lib/python3.9/site-packages/requests_html.py", line 586, in render
self.browser = self.session.browser # Automatically create a event loop and browser
File "/home/inky3/PythonProjects/pidonationtracker/.venv/lib/python3.9/site-packages/requests_html.py", line 730, in browser
self._browser = self.loop.run_until_complete(super().browser)
File "/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
return future.result()
File "/home/inky3/PythonProjects/pidonationtracker/.venv/lib/python3.9/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/inky3/PythonProjects/pidonationtracker/.venv/lib/python3.9/site-packages/pyppeteer/launcher.py", line 307, in launch
return await Launcher(options, **kwargs).launch()
File "/home/inky3/PythonProjects/pidonationtracker/.venv/lib/python3.9/site-packages/pyppeteer/launcher.py", line 148, in launch
self.proc = subprocess.Popen( # type: ignore
File "/usr/lib/python3.9/subprocess.py", line 951, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/lib/python3.9/subprocess.py", line 1823, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 8] Exec format error: '/home/inky3/.local/share/pyppeteer/local-chromium/1181205/chrome-linux/chrome'
现在我读了一些较旧的帖子(例如:在树莓派上运行 puppeteer 时出现 OSError ),这些帖子说 chromium 浏览器不是树莓派 ARM 芯片组的正确版本。其中很多帖子都是 2019 年及之前的,所以我不确定他们的解决方案是否仍然准确。
我尝试从这里再次安装 Chrome 驱动程序: https://sites.google.com/chromium.org/driver/
还是同样的错误。可能是因为 Puppeteer 正在寻找其他地方。
然后我读了这篇文章:https://github.com/miyakogi/pyppeteer/issues/250 这表示我应该安装 chromium-codecs-ffmpeg 和 chromium-browser (来自 https://launchpad.net/ubuntu/trusty/armhf/chromium-codecs-ffmpeg 和 https://launchpad.net/ubuntu/ trusty/armhf/chromium 浏览器)。这也是2018年的材料。但我必须尝试一些事情。
当我尝试使用这些命令安装它们时:
wget http://launchpadlibrarian.net/361669486/chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb
wget http://launchpadlibrarian.net/361669485/chromium-browser_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb
sudo dpkg -i chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb
..我遇到了依赖性问题:
Selecting previously unselected package chromium-codecs-ffmpeg.
dpkg: considering removing chromium-codecs-ffmpeg-extra in favour of chromium-codecs-ffmpeg ...
dpkg: no, cannot proceed with removal of chromium-codecs-ffmpeg-extra (--auto-deconfigure will help):
rpi-chromium-mods depends on chromium-codecs-ffmpeg-extra
chromium-codecs-ffmpeg-extra is to be removed.
dpkg: regarding chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb containing chromium-codecs-ffmpeg:
chromium-codecs-ffmpeg conflicts with chromium-codecs-ffmpeg-extra
chromium-codecs-ffmpeg-extra (version 120.0.6099.102-rpt1) is present and installed.
dpkg: error processing archive chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb (--install):
conflicting packages - not installing chromium-codecs-ffmpeg
Errors were encountered while processing:
chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb
所以这是我必须卸载的东西的列表:
sudo dpkg --remove --force-remove-reinstreq rpi-chromium-mods
sudo dpkg --remove --force-remove-reinstreq chromium-chromedriver
sudo dpkg --remove --force-remove-reinstreq chromium-browser-l10n
sudo dpkg --remove --force-remove-reinstreq chromium-browser
但是当我尝试卸载 chromium-browser 时,我得到了完整的依赖项列表:
dpkg: dependency problems prevent removal of chromium-browser:
libreoffice-help-en-us depends on firefox-esr | epiphany-browser | konqueror | chromium | firefox; however:
Package firefox-esr is not installed.
Package epiphany-browser is not installed.
Package konqueror is not installed.
Package chromium is not installed.
Package chromium-browser which provides chromium is to be removed.
Package firefox is not installed.
libreoffice-help-en-gb depends on firefox-esr | epiphany-browser | konqueror | chromium | firefox; however:
Package firefox-esr is not installed.
Package epiphany-browser is not installed.
Package konqueror is not installed.
Package chromium is not installed.
Package chromium-browser which provides chromium is to be removed.
Package firefox is not installed.
好吧,这变得很荒谬。我是否真的必须卸载 Firefox、Konqueror 和一整套其他东西才能安装旧版本的 chromium 编解码器,让 Puppeteer 采用正确版本的 Chromium。还是我走错方向了。
我也尝试过使用 Selenium 来代替。如果您想了解我失败的更多详细信息,我可以提供它们。它们也与铬相关。
或者这可能吗?这似乎是一个简单的任务。只需从网页上抓取一个浮动..
我自己找到了解决方案。
我尝试使用以下命令安装 chromium 编解码器: sudo dpkg -i chromium-codecs-ffmpeg_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb
但这确实需要一个强制所有选项。像这样: wget https://launchpad.net/ubuntu/trusty/armhf/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
wget https://launchpad.net/ubuntu/trusty/armhf/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
那么你还没有完成。您需要将 puppeteer 使用的 chrome 浏览器链接到正确的 ARM 版本的 chromium。
所以检查 chromium 浏览器在哪里。 chrome 浏览器在哪里
结果可能如下所示: 铬浏览器: /usr/bin/chromium-browser /usr/lib/chromium-browser /etc/chromium-browser /usr/share/chromium-browser /usr/share/man/man1/chromium-browser.1.gz
现在转到 OSError: [Errno 8] 错误中找到的路径: cd /home/inky3/.local/share/pyppeteer/local-chromium/1181205/chrome-linux/
并链接到 chromium 浏览器: ln -s /usr/bin/chromium-browser chrome
突然我的抓取命令开始工作了。