如何使用requests_html忽略无效的SSL证书?

6
基本上,我正在尝试从网站中抓取由JavaScript生成的数据。为此,我使用Python库requests_html
以下是我的代码:
from requests_html import HTMLSession
session = HTMLSession()

url = 'https://myurl'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
payload = {'mylog': 'root', 'mypass': 'root'}

r = session.post(url, headers=headers, verify=False, data=payload)
r.html.render()
load = r.html.find('#load_span', first=True)

print (load.text)  

如果我不使用render()函数,我可以连接到网站并且我的抓取数据为空(这是正常的),但是当我使用它时,我遇到了这个错误:
pyppeteer.errors.PageError: net::ERR_CERT_COMMON_NAME_INVALID at https://myurl

或者
net::ERR_CERT_WEAK_SIGNATURE_ALGORITHM

我假设会话.post的参数“verify=False”被渲染忽略了。我该怎么做?
编辑:如果您想重现错误:
from requests_html import HTMLSession
import requests

session = HTMLSession()

url = 'https://wrong.host.badssl.com'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

r = session.post(url, headers=headers, verify=False)

r.html.render()

load = r.html.find('#content', first=True)

print (load)

你使用的是哪个版本的Python和Request库? - Alessandro
@Alessandro 我正在使用Python3.6和requests_html 0.9.0。 - LayaCazoca
你使用的是哪个操作系统?以你的方式复现这个错误相当困难。 - Alessandro
@Alessandro 我使用的是 MacOS,我认为任何没有经过验证的证书的网站都可能会出现这种情况。 - LayaCazoca
@Alessandro 我编辑了帖子以提供一个重现。 - LayaCazoca
1个回答

8
唯一的方法是在pyppeteer中设置ignoreHTTPSErrors参数。问题在于,requests_html没有提供任何设置此参数的方法,实际上,这方面还有一个问题。我的建议是通过在此处添加另一条消息来再次联系开发人员。

或者你可以拉取这个新功能。

另一种方法是使用Selenium。

编辑:
我已经添加了一个pull request(已接受),其中包含verify=False作为一个特性。现在可以忽略SSL错误 :)

它不是Get()的参数,当你实例化对象时设置它

session = HTMLSession(verify=False)

我将尝试使用Selenium。我已经在html_request的GitHub上更新了问题。感谢您的建议。 - LayaCazoca
我明白了。我也会关注这个问题,因为我对这个功能非常感兴趣。当你认为这个问题已经解决时,请不要忘记选择你最喜欢的答案。 - Alessandro
我成功了,但这有点不干净。进入文件“python3.x/site-packages/pyppeteer/requests_html.py”,在第680行添加参数:self._browser = self.loop.run_until_complete(pyppeteer.launch(ignoreHTTPSErrors=True, headless=True, args=['--no-sandbox'])) - LayaCazoca
是的,这可以作为拉取请求的一部分。 - Alessandro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接