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

Lay*_*oca 5 javascript python ssl web-scraping python-requests

所以基本上我试图从网站上抓取 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)  
Run Code Online (Sandbox Code Playgroud)

如果我不使用 render() 函数,我可以连接到网站并且我抓取的数据为空(这是正常的)但是当我使用它时,我有这个错误:

pyppeteer.errors.PageError: net::ERR_CERT_COMMON_NAME_INVALID at https://myurl
Run Code Online (Sandbox Code Playgroud)

或者

net::ERR_CERT_WEAK_SIGNATURE_ALGORITHM
Run Code Online (Sandbox Code Playgroud)

我假设 session.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)
Run Code Online (Sandbox Code Playgroud)

Ale*_*dro 8

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

或者也许您可以使用这个新功能。

另一种方法是使用Selenium。

编辑:
我添加了verify=False带有拉取请求的功能(已接受)。现在可以忽略 SSL 错误:)

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

session = HTMLSession(verify=False)
Run Code Online (Sandbox Code Playgroud)