企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] # 一 反爬措施 在需要登录的页面,用普通验证码拦截用户,当手动获取了改验证码并识别后,再次登录,会发现验证码已经变了 因为验证码是点击一次就变一次,所以获取的验证码已经不是后面的验证码了 # 二 对抗措施 1. 使用session保持会话 2. 然后用该session去请求首页 3. 获取验证码地址并下载 4. 识别验证码并记录 5. 获取post请求的页面和参数 6. 处理参数 7. 通过session,带上参数登录 # 三 借助session实现验证码登陆 ```python import requests from lxml import etree from chaojiying import Chaojiying_Client url='https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx' headers={ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36' } # 1. 先实例化一个session对象,并带上啊session请求网页 res_s=requests.Session() pageinfo=res_s.get(url=url,headers=headers).text #2. 通过session,获取网页图片 tree=etree.HTML(pageinfo) image_url='https://so.gushiwen.org/'+tree.xpath('//*[@id="imgCode"]/@src')[0] image_content=res_s.get(url=image_url,headers=headers).content with open('a.jpg','wb') as fp: fp.write(image_content) cjy=Chaojiying_Client('noah666', '68t.guCQ3uUmL8K', '904156') im = open('a.jpg', 'rb').read() image_code=cjy.PostPic(im, 1902)['pic_str'] # 3. 从tree对象中,解析post请求所需动态参数 VIEWSTATE=tree.xpath('//*[@id="__VIEWSTATE"]/@value')[0] VIEWSTATEGENERATOR=tree.xpath('//*[@id="__VIEWSTATEGENERATOR"]/@value')[0] # 4. 处理post请求网页及参数 data={ '__VIEWSTATE': VIEWSTATE, '__VIEWSTATEGENERATOR': VIEWSTATEGENERATOR, 'from':'http://so.gushiwen.org/user/collect.aspx', 'email': 'www.zhangbowudi@qq.com', 'pwd': 'bobo328410948', 'code': image_code, 'denglu': '登录' } url='https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx' # 5. 模拟请求,并将结果保存 login=res_s.post(url=url,data=data,headers=headers).text with open('./gushiwenwang.html','w',encoding='utf-8') as fp: fp.write(login) ```