过程简要描述:创建一个session,用这个session发送请求。请求报文中的字段都很简单,稍微分析下登录发送请求报文就能明白,除了一个动态码。通过分析登录请求报文,我发现报文首部中需要一个动态生成的动态码,这个动态码藏在登陆页面的前端代码中,所以获取前端动态码很重要。登录成功后,成功登录的状态将保存到session中,可以利用这个session访问任何信息。
注意:需要手动输入验证码,验证码图片自动下载到当前文件夹下。
代码实现如下:
import re
import requests
import urllib
from lxml import etree
import operator as op
import xlwt
# 获取前端动态码
def get___VIEWSTATE(session):
index_url = 'http://210.44.159.4'
index_page = session.get(index_url, headers = headers)
html = index_page.text
pattern = r'name="__VIEWSTATE" value="(.*?)"'
__VIEWSTATE = re.findall(pattern, html)
return __VIEWSTATE[0]
# 获取前端动态码
def get___VIEWSTATE_by_url(session, index_url):
index_page = session.get(index_url, headers = headers)
html = index_page.text
pattern = r'name="__VIEWSTATE" value="(.*?)"'
__VIEWSTATE = re.findall(pattern, html)
return __VIEWSTATE[0]
# 获取前端动态码
def get___VIEWSTATE_by_html(session, html_text):
html = html_text
pattern = r'name="__VIEWSTATE" value="(.*?)"'
__VIEWSTATE = re.findall(pattern, html)
return __VIEWSTATE[0]
# 获取前端动态码
def get___VIEWSTATEGENERATOR(session):
index_url = 'http://210.44.159.4'
index_page = session.get(index_url, headers=headers)
html = index_page.text
pattern = r'name="__VIEWSTATEGENERATOR" value="(.*?)"'
__VIEWSTATEGENERATOR = re.findall(pattern, html)
return __VIEWSTATEGENERATOR[0]
# 获取前端动态码
def get___VIEWSTATEGENERATOR_by_url(session, index_url):
index_page = session.get(index_url, headers=headers)
html = index_page.text
pattern = r'name="__VIEWSTATEGENERATOR" value="(.*?)"'
__VIEWSTATEGENERATOR = re.findall(pattern, html)
return __VIEWSTATEGENERATOR[0]
# 获取前端动态码
def get___VIEWSTATEGENERATOR_by_html(session, html_text):
html = html_text
pattern = r'name="__VIEWSTATEGENERATOR" value="(.*?)"'
__VIEWSTATEGENERATOR = re.findall(pattern, html)
return __VIEWSTATEGENERATOR[0