验证码操作

 

 

#下载验证码到本地
import requests
from lxml import etree
import urllib.request

s = requests.session()

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; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}

page_content = s.get(url,headers=headers).text

tree = etree.HTML(page_content)
img_url = tree.xpath('//img[@id="imgCode"]/@src')[0]
img_url = 'https://so.gushiwen.org' + img_url

#urllib.request.urlretrieve(img_url,'./code.png')
img_data = s.get(url=img_url,headers=headers).content
with open('./code.png','wb') as fp:
    fp.write(img_data) 

#解析form表单的令牌数据(反爬手段)
key_1 = tree.xpath('//*[@id="__VIEWSTATE"]/@value')[0]
key_2 = tree.xpath('//*[@id="__VIEWSTATEGENERATOR"]/@value')[0]

#step 2:抓包获取登录url
code = input('查看下验证码内容:')
post_url = 'https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx'
data = {
    "__VIEWSTATE":key_1,
    "__VIEWSTATEGENERATOR":key_2,
    "from":"http://so.gushiwen.org/user/collect.aspx",
    "email":"www.zhangbowudi@qq.com",
    "pwd":"123456",
    "code":code,
    "denglu":"登录"
}
page_content = s.post(url=post_url,headers=headers,data=data).text

with open('./second.html','w',encoding='utf-8') as fp:
    fp.write(page_content)
print('over')

 

posted @ 2018-09-27 22:51  xujinjin  阅读(114)  评论(0编辑  收藏  举报