无法模拟登录“古诗文网”,显示“提交失败,您输入的验证码有误!”在CSDN上找遍所有相关帖子,问题都解决不了。
import requests
from lxml import etree
#创建一个session对象
session = requests.Session()
#将验证码图片下载到本地
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36 Edg/100.0.1185.36'
}
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
page_text = session.get(url=url,headers=headers).text
#解析验证码图片img中scr属性值
tree = etree.HTML(page_text)
code_img_src = 'https://so.gushiwen.cn/' + tree.xpath('//*[@id="imgCode"]/@src')[0]
img_data = session.get(url=code_img_src,headers=headers).content
#将验证码图片保存到了本地
with open('./code.jpg','wb') as fp:
fp.write(img_data)
# # 验证码处理(高级)
import tesserocr
from PIL import Image
image = Image.open('code.jpg')
image = image.convert('L') # 使用Image对象的convert()方法传入'L'参数,将图片转化为灰度图像
# # 法一:传入‘1’即可将图片进行二值化处理
# image = image.convert('1')
# 法二:将原图转化为灰度图,然后指定二值化阈值,进行二值化处理
threshold = 80
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
image = image.point(table, '1')
# 验证码OCR识别
text = tesserocr.image_to_text(image)
print(text)
# 获取动态变化的请求值
__VIEWSTATE = tree.xpath('//*[@id="__VIEWSTATE"]/@value')[0]
__VIEWSTATEGENERATOR = tree.xpath('//*[@id="__VIEWSTATEGENERATOR"]/@value')[0]
login_url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
data = {
'__VIEWSTATE': __VIEWSTATE,
'__VIEWSTATEGENERATOR': __VIEWSTATEGENERATOR,
'from': 'http://so.gushiwen.cn/user/collect.aspx',
'email': '11111111111',
'pwd': 'qwer1234',
'code': text,
'denglu': '登录',
}
response = session.post(url=login_url,headers=headers,data=data)
print(response.status_code) #用以验证,若响应值为“200”,则成功;反之,则网站数据发生变动,需修改。
login_page_text = session.post(url=login_url,headers=headers,data=data).text
with open('gushiwen.html','w',encoding='utf-8') as fp:
fp.write(login_page_text)
我在查找CSDN上的帖子时,都说要从头到尾都用session,可是我用了仍不行。只有一个帖子,将“data”里的“code”改为“input”输入才能成功,否则一律不行。
不用input,按照我这个思路实现模拟登录。