V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
pppguest3962
V2EX  ›  Python

求助, pyppeteer 的使用,卡在 chromium_downloader 环节,请各位高手支招

  •  
  •   pppguest3962 · 2019-07-26 15:34:57 +08:00 · 422 次点击
    这是一个创建于 1707 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 pccharm 安装 requests-html,目前已经装好了 requests-html
    在第一次使用的时候,pyppeteer 还是 requests-html 会有个自动下载安装 chromium,
    直接自动安装是不成功的,
    在报错信息里面看到(因为太困,昨晚没有及时保存报错信息,这里贴不出来)
    动手去看看

    C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Lib\site-packages\pyppeteer\chromium_downloader.py  
    

    看到:

    DEFAULT_DOWNLOAD_HOST = 'https://storage.googleapis.com'  
    

    这个就有高墙,直接去不了,根据网上建议,给 chromium_downloader.py 里的 urllib3 加梯
    我这么做的:

        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
        }
        proxy = urllib3.ProxyManager('http://192.168.89.31:7070', headers=headers)#自己的虫洞地址
    
    
        # with urllib.PoolManager() as http:#这是原句
        with urllib3.PoolManager() as proxy:#改成这个
            # Get data from url.
            # set preload_content=False means using stream later.
            # data = http.request('GET', url, preload_content=False)#这是原句
            data = proxy.request('GET', url, preload_content=False)#改成这个使用虫洞
    

    然后又报了个 http ssl 的错误,再根据网上的建议,把

    DEFAULT_DOWNLOAD_HOST = 'https://storage.googleapis.com'
    

    改成普通 http:

    DEFAULT_DOWNLOAD_HOST = 'http://storage.googleapis.com'  
    

    ,然后下载进度条出来了,等了好久,似乎终于下载完了,chromium_downloader.py 就报了个错,大概说这个 rar/zip 文件是错误的,
    瞬间就觉得心很累了,我没有更好的梯子,而且我刚才在公司试了一下,连进度条都不出来,一直卡在那里,看来是梯子质量不行也有关系
    但是我直接拼接地址,用同一把梯子,用浏览器下载 https://storage.googleapis.com//chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip
    是完全没问题的,在 urllib3 里使用代理就很慢很慢了。。。

    有不折腾的办法继续么? 最后想法是成功使用上 requests-html...

    13 条回复    2019-07-27 10:24:17 +08:00
    BBCCBB
        1
    BBCCBB  
       2019-07-26 15:38:09 +08:00
    用你本地的 chrome.exe 路径试试,
    browser 里有个参数 executablePath
    BBCCBB
        2
    BBCCBB  
       2019-07-26 15:38:58 +08:00
    或者将你下的 zip 包放到对应位置., 具体哪个位置不记得了..
    pppguest3962
        3
    pppguest3962  
    OP
       2019-07-26 15:43:18 +08:00
    @BBCCBB 在使用 request-html 的时候,似乎也不需要也没有干预浏览器的位置吧?

    ```
    session = HTMLSession()
    r = session.get('https://www.baidu.com')
    r.html.render()
    print(r.html.html)

    ```
    简单获取目标的 html 代码,似乎干预不了 chrome.exe 的行为?
    wszgrcy
        4
    wszgrcy  
       2019-07-26 15:44:29 +08:00 via Android
    用 core,下国内镜像,按照 1 楼额来
    pppguest3962
        5
    pppguest3962  
    OP
       2019-07-26 15:46:09 +08:00
    @BBCCBB 嗯嗯,我想也是的,但是我水平不够,看不出来下载的包应该怎么样拜访,才是被认为正确安装。。。^_^
    pppguest3962
        6
    pppguest3962  
    OP
       2019-07-26 15:48:47 +08:00
    @wszgrcy croe ? 镜像? 不是很明白意思,我直接把 DEFAULT_DOWNLOAD_HOST = 'https://storage.googleapis.com'
    改指向其它地方么?
    huayunbin
        7
    huayunbin  
       2019-07-26 16:33:33 +08:00
    试试这个
    export PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.com.cnpmjs.org
    npm i puppeteer
    wszgrcy
        8
    wszgrcy  
       2019-07-26 16:44:12 +08:00 via Android
    @pppguest3962 npm 包里有 puppeteer 和 puppeteer-core,后者不带浏览器,需要自己手动下载,淘宝有镜像源,可以下载后指定路径
    pppguest3962
        9
    pppguest3962  
    OP
       2019-07-26 16:46:06 +08:00
    @huayunbin 谢谢解答,不过我是在 win 的环境里,

    试着套路硬来:

    ```
    C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Lib\site-packages\pyppeteer\chromium_downloader.py
    ```
    的内容改为:
    DEFAULT_DOWNLOAD_HOST = 'https://storage.googleapis.com.cnpmjs.org'

    报错:
    urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='storage.googleapis.com.cnpmjs.org', port=443): Max retries exceeded with url: /chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))

    把 https->http
    报错也是一致的。。。
    BBCCBB
        10
    BBCCBB  
       2019-07-26 16:52:05 +08:00
    这个百度能找到 pyppeteer 需要的浏览器包的位置的.
    要么就挂个代理试试
    dbow
        11
    dbow  
       2019-07-26 16:58:25 +08:00
    在海外 vps 上下载, 然后把文件复制回来
    qdzzyb
        12
    qdzzyb  
       2019-07-26 18:53:23 +08:00
    PUPPETEER_DOWNLOAD_HOST=https://npm.taobao.org/mirrors
    pppguest3962
        13
    pppguest3962  
    OP
       2019-07-27 10:24:17 +08:00
    非常感谢楼上各位的热线解答,问题已经解决了,楼上各位的办法都是好主意~
    顺便提一下解决的方法:
    按 12 楼的方式解决最简便,只是要把 s 去掉,https->http
    下载安装速度杠杠的。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3226 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:56 · PVG 19:56 · LAX 04:56 · JFK 07:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.