python 爬虫遇到验证码如何解决

1.安装对应的库

安装tesseract https://digi.bib.uni-mannheim.de/tesseract/,其中文件名中带有dev的为开发版本,不带dev的为稳定版本,可以选择下载不带dev的版本,例如可以选择下载tesseract-ocr-setup-3.05.02.exe,配置环境变量。配置完成后在命令行输入tesseract -v,如果出现如下图所示,说明环境变量配置成功
pip install pytesseract 导入第三方库

2.验证过程出现的问题

优化验证码图片的步骤有时间在补,方法有很多,例如机器学习的方法等.
我在验证过程中出现了很多问题,在调试界面输入了正确的验证码,返回提示验证还是错误.
python 爬虫遇到验证码如何解决_第1张图片
python 爬虫遇到验证码如何解决_第2张图片
然后我用postman跑了一遍,在跑postman时,经过多次尝试发现验证码只能用一次,所以只需要两个页面的url,一个是验证码页(getVerificationCode),一个就是我们要获取内容的列表页(getPageInfoListNewYzm),我还发现在获取列表页内容的时候返回了一个cookie
python 爬虫遇到验证码如何解决_第3张图片
这时候我猜测,这个sid是由python同种方法uuid.uuid4生成的,于是我尝试用自己的方法来进行仿写sid并填入cookie.

'sid=' + "".join(str(uuid.uuid4()).split('-')).upper()

添加验证了还是错误,由于postman已经跑通了,那就代表流程对了,我着重观察了一下postman里请求头有哪些
python 爬虫遇到验证码如何解决_第4张图片
没啥特殊要添加的…
浏览器访问需要验证码的列表页,用Fiddler抓包看看
在这里插入图片描述
在这里插入图片描述
python 爬虫遇到验证码如何解决_第5张图片
将Cookie里面的内容组装完全,accesstoken和refreshtoken是请求一个token页面得到的,请求几次发现得到的是一致的,直接写死就好.

再post请求验证码页输入对应的url
response = request.post(url)中查看一下response.headers,返回一个字典

print('???????', response.headers, '........', response.cookies.items())

得到结果:

??????? {'Server': 'TencentWAF', 'Date': 'Mon, 12 Dec 2022 05:10:29 GMT', 'Content-Type': 'text/html;charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'X-Frame-Options': 'SAMEORIGIN', 'Set-Cookie': 'sid=AFD4284C6056490ABCF4EC274F9082E0; Path=/EpointWebBuilder/; HttpOnly', 'Content-Encoding': 'gzip', 'vary': 'accept-encoding'} ........ [('sid', 'AFD4284C6056490ABCF4EC274F9082E0')]

response.headers[‘Set-Cookie’]得到sid,添加到post访问列表页的headers里,即

header = {
    "User-Agent":'',
    "Cookie": response_obj.headers['Set-Cookie'] + '; oauthClientId=eb0ca577-4055-43ba-8744-ebfc86c2f02e; oauthPath=http://hnsggzyjy.henan.gov.cn/TPFrame; oauthLoginUrl=http://127.0.0.1:1112/membercenter/login.html?redirect_uri=; oauthLogoutUrl=; noOauthRefreshToken=' + refresh_token + '; noOauthAccessToken=' + access_token
}

再去访问就可以成功得到列表页的信息了.

你可能感兴趣的:(python,爬虫,postman)