pyppeteer 离线环境配置

1、使用豆瓣源安装 pyppeteer:
pip install -i https://pypi.douban.com/simple/ pyppeteer
2、添加环境变量,更改下载 chromium 的来源网站和执行路径:
pyppeteer 第一次运行时,会自动下载 chromium 浏览器,时间可能会有些长。不过,我第一次运行时,直接报错:

[W:pyppeteer.chromium_downloader] start chromium download.
Download may take a few minutes.
可以看到,下载功能是由 pyppeteer.chromium_downloader 模块完成的,那么我们进入这个模块查看源码。

在这个模块源码中,我们可以看到 downloadURLs、chromiumExecutable 等变量,很明显指的就是下载链接和 chromium 的可执行文件路径。我们重点关注一下可执行文件路径

复制代码
chromiumExecutable:
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’,
}
复制代码
可见,无论在哪个平台下,chromiumExecutable 都是由是 4 个部分组成,其中 DOWNLOADS_FOLDER 和 REVISION 是定义好的变量:

DOWNLOADS_FOLDER = Path(pyppeteer_home) / ‘local-chromium’
进一步查看可以发现:

pyppeteer_home = os.environ.get(‘PYPPETEER_HOME’, AppDirs(‘pyppeteer’).user_data_dir)
REVISION = os.environ.get(‘PYPPETEER_CHROMIUM_REVISION’, chromium_revision)
所以,DOWNLOADS_FOLDER 和 REVISION 都是读取对应环境变量设置好的值,如果没有设置,就使用默认值。我们来输出一下,看看默认值:复制代码

import pyppeteer.chromium_downloader
print(‘默认版本是:{}’.format(pyppeteer.chromium_revision))
print(‘可执行文件默认路径:{}’.format(pyppeteer.chromium_downloader.chromiumExecutable.get(‘win64’)))
print(‘win64 平台下载链接为:{}’.format(pyppeteer.chromium_downloader.downloadURLs.get(‘win64’)))
输出结果如下:

1
2
3
默认版本是:575458
可执行文件默认路径:C:\Users\Administrator\AppData\Local\pyppeteer\pyppeteer\local-chromium\575458\chrome-win32\chrome.exe
win64 平台下载链接为:https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip
在使用上面代码的时候,你可以将 win64 换成你的平台就好了,有了上面的下载链接,这个时候就可以先开始下载着 chromium 浏览器(有些慢),然后继续往下看。

对于版本默认的就好了。但是,对于 chromium 的可执行文件路径,默认是在 C 盘,对于有 C 盘洁癖的我,咋看咋不舒服,那就改了吧。从上面的分析中我们可以知道,C:\Users\Administrator\AppData\Local\pyppeteer\pyppeteer 这一部分读取的是环境变量或者默认值,所以,我们可以通过配置环境变量改这一部分(或者也可以直接改源码,读取环境变量那一行,直接设为固定值),通过 os.environ 添加 PYPPETEER_HOME 这一变量值,例如我想把我的 chromium 放在 D 盘的 Program Files 文件夹下:
复制代码

import os
os.environ[‘PYPPETEER_HOME’] = ‘D:\Program Files’
import pyppeteer.chromium_downloader
print(‘默认版本是:{}’.format(pyppeteer.chromium_revision))
print(‘可执行文件默认路径:{}’.format(pyppeteer.chromium_downloader.chromiumExecutable.get(‘win64’)))
print(‘win64 平台下载链接为:{}’.format(pyppeteer.chromium_downloader.downloadURLs.get(‘win64’)))
复制代码
输出如下:

1
2
3
默认版本是:575458
可执行文件默认路径:D:\Program Files\local-chromium\575458\chrome-win32\chrome.exe
win64 平台下载链接为:https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip
特别提醒:上面设置环境变量的那一行,必须在导入 pyppeteer 这一行上面,否则设置无效。

上面这种方法你需要在每次使用 pypeeteer 之前通过这行代码设置一下,实在麻烦,所以,我还是更愿意直接在 windows 系统里面添加这个变量:

虽然我们把环境变量设置为 D:\Program Files,但是层层文件夹之后,才到真正的可执行文件 chrome.exe,下载好的压缩包解压后,所有文件都在名为 chrome-win 的文件夹中,所以,我们需要在 D:\Program Files 创建 local-chromium\575458 这两个文件夹(575458 是上面的版本号,记得修改为你的版本号),然后将解压得到的 chrome-win 文件夹,重命名为 chrome-win32,然后直接拷贝进去就好,整个安装过程就完成了。

变量名为 PYPPETEER_DOWNLOAD_HOST,对应值为http://npm.taobao.org/mirrors; 下载链接选改

3、在 cmd 终端进入 python/ipython 环境,执行以下代码查看:
import pyppeteer

chromium 执行目录

pyppeteer.chromium_downloader.chromiumExecutable.get(‘win64’)

下载 chromium 的 url 地址

pyppeteer.chromium_downloader.downloadURLs.get(‘win64’)
配置成功的话,我这边返回的结果如下:

WindowsPath(‘D:/Program Files/pyppeteer/local-chromium/588429/chrome-win32/chrome.exe’)

http://npm.taobao.org/mirrors/chromium-browser-snapshots/Win_x64/588429/chrome-win32.zip
至此环境配置是成功了,如果没生效注意重新打开 cmd 窗口试试。