当前位置:   article > 正文

Linux下使用 headless 浏览器_err_no_supported_proxies

err_no_supported_proxies

项目的需要,需要在Linux下跑headless的浏览器,能执行页面的javascript代码,初始的想法是用selenium,但selenium并发量上可能会有比较大的瓶颈,所以还是考虑API的方式,搜索到 requests_html 满足需求。

了解下了原理,其实requests_html调用的headless浏览器也是通过pyppeteer 启动 chrome,

这个安装起来比selenium简单多了,如果本机没有安装chrome 的话,调用pyppeteer的时候,会自动下载chrome, 参考如下完整代码。

  1. from requests_html import HTMLSession
  2. import logging
  3. logging.basicConfig(filename="jscc.log", level=20,
  4. format='%(asctime)s %(name)s %(levelname)s %(module)s:%(lineno)d %(message)s')
  5. logging.info("Start access process")
  6. # 此处设置proxy是浏览器维度的,此处设置了,后面的get, post,render 都会走此proxy
  7. session = HTMLSession(browser_args=['--no-sandbox', '--proxy-server=http://th.proxy.com:30000'])
  8. logging.info("start chrome")
  9. headers = {
  10. 'Connection': 'close',
  11. 'User_Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
  12. }
  13. for i in range(1,10):
  14. try:
  15. logging.info("i:"+str(i))
  16. # 如果浏览器维度没有设置proxy,也可以这里设置proxy,这里设置的话,只有这个请求走proxy,
  17. # 后面的render不会走proxy
  18. r = session.get('https://www.baidu.com/',timeout=120,headers=headers)
  19. logging.info("get done")
  20. #模拟浏览器渲染页面,此处可以解析页面中的javascript代码
  21. r.html.render()
  22. logging.info("render done")
  23. except:
  24. logging.exception("jxe:")

几个问题:

1、在浏览器维度设置代理服务器的话,pyppeteer不支持账号密码的代理,如果使用带账号密码的代理会出现下面错误。解决办法是使用不带账号密码的代理,如果不得不用的话,哪里就本机搭建个代理服务器,让本机的代理服务器和真实代理服务器做验证。然后设置pyppeteer 走本机代理。

pyppeteer.errors.PageError: net::ERR_NO_SUPPORTED_PROXIES

2. 出现 pyppeteer.errors.BrowserError: Unexpectedly chrome process closed  

   有两种解决方法: a. 修改 requests-html 源代码。增加

browser = pyppeteer.launch(headless=True, args=['--no-sandbox']),如下图

  1. async def _async_render(*, url: str, script: str = None, scrolldown, sleep: int, wait: float, reload, content: Optional[str], timeout: Union[float, int]):
  2. try:
  3. browser = pyppeteer.launch(headless=True, args=['--no-sandbox'])
  4. page = await browser.newPage()

     b. 在浏览器启动的时候,加入参数;

session = HTMLSession(browser_args=['--no-sandbox', '--proxy-server=http://xxx.xxx.com:30000'])

 3. 出现如下错误:while loading shared libraries: libXss.so.1: cannot open shared object file: No s, 安装好下面包就行,

yum install libXScrnSaver*

如果还不行,说明环境变量设置有问题。通过下面命令查找libXss.so.1所在目录,把找到的路径加入到环境变量。假如找到的路径为/lib64/libXss.so.1

find / -name libXss.so.1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib64

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/90213
推荐阅读
相关标签
  

闽ICP备14008679号