侧边栏壁纸
  • 累计撰写 19 篇文章
  • 累计收到 4 条评论

requests_html模块无法下载chromium的问题

eson
2024-04-22 / 0 评论 / 147 阅读 / 正在检测是否收录...

前言

今天无意中发现的requests是无法解析js执行后的结果的,只能把源码中的js代码给返回过来,而刚好需要读取一个网页的js执行后的结果,于是发现了requests_html这个模块,但是按照示例代码执行后就一直报错,后来才发现它是基于Chromiun处理的,而模块自身下载Chromium在国内环境中是失效的。

使用示例

import requests_html

url = "https://www.baidu.com"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}

session = requests_html.HTMLSession()
req = session.get(url, headers=headers)
req.encoding = "utf-8"
req.html.render()
get_html = req.html.html
print(get_html)

思路

既然模块自身不能下载,那我们只能自己动手下载了,于是乎开始各种搜索,终于找到一个比较好用的下载镜像。

https://registry.npmmirror.com/binary.html?path=chromium-browser-snapshots

再接下来就是放置路径的问题了。

进入python安装目录下的\Lib\site-packages\pyppeteer目录,然后打开chromium_downloader.py文件

找到代码:

chromiumExecutable = {
'linux': DOWNLOADS_FOLDER / REVISION / 'chrome-linux' / 'chrome',
'mac': (DOWNLOADS_FOLDER / REVISION / 'chrome-mac' / 'Chromium.app' /
'Contents' / 'MacOS' / 'Chromium'),
'win32': DOWNLOADS_FOLDER / REVISION / 'chrome-win32' / 'chrome.exe',
'win64': DOWNLOADS_FOLDER / REVISION / 'chrome-win32' / 'chrome.exe',
}

这里调用了 DOWNLOADS_FOLDER 和 REVISION,那我们继续往下找,终于找到了

DOWNLOADS_FOLDER = Path(__pyppeteer_home__) / 'local-chromium'
DEFAULT_DOWNLOAD_HOST = 'https://storage.googleapis.com'
DOWNLOAD_HOST = os.environ.get('PYPPETEER_DOWNLOAD_HOST', DEFAULT_DOWNLOAD_HOST)
BASE_URL = f'{DOWNLOAD_HOST}/chromium-browser-snapshots'

REVISION = os.environ.get('PYPPETEER_CHROMIUM_REVISION', __chromium_revision__)

我们在源代码的下方直接加入PRINT把路径打印出来。

DOWNLOADS_FOLDER = Path(__pyppeteer_home__) / 'local-chromium'
DEFAULT_DOWNLOAD_HOST = 'https://storage.googleapis.com'
DOWNLOAD_HOST = os.environ.get('PYPPETEER_DOWNLOAD_HOST', DEFAULT_DOWNLOAD_HOST)
BASE_URL = f'{DOWNLOAD_HOST}/chromium-browser-snapshots'
REVISION = os.environ.get('PYPPETEER_CHROMIUM_REVISION', __chromium_revision__)
print(DOWNLOADS_FOLDER)
print(REVISION)

此时我们再执行一下之前的脚本,就能得到路径了。

C:\Users\eson\AppData\Local\pyppeteer\pyppeteer\local-chromium
1181205

那么我们组合一下路径就可以得知

C:\Users\eson\AppData\Local\pyppeteer\pyppeteer\local-chromium\1181205\chrome-win

把下载好的Chromium放置在这个目录就可以了。

总结

这个问题是解决了,模块也正常使用了,但是我发现我遇到的问题远没这么简单,还需要继续往下进行JS逆向分析 表情

5

评论 (0)

取消