获取登陆所需的其他参数
这样的登陆获取的参数类型比较多,但基本都是登陆前页面里面的数据,全局搜索一下就可以找到。
这里就举一个我常见的。
同样登陆前开fiddler抓包,登陆后全局搜索:
可以看到登陆提交的参数贼多
然后随便复制一个值90A550F9,再次全局搜索
看到了两个高亮,一个是登陆时提交的,一个就是产生的页面了
在第一请求里搜索一下就可以看见那个值了,其他参数同理可得。
于是可以写代码了
self.session = self.gen_session() login_text = self.session.get('http://***.***.7.114/LogForm.aspx').text selector = Selector(text=login_text) EVENTVALIDATION = selector.xpath('//input[@id="__EVENTVALIDATION"]/@value').extract_first() VIEWSTATE = selector.xpath('//input[@id="__VIEWSTATE"]/@value').extract_first() VIEWSTATEGENERATOR = selector.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value').extract_first() headers = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.8", "Content-Type": "application/x-www-form-urlencoded", "Proxy-Connection": "keep-alive", "Referer": "http://61.155.7.114/LogForm.aspx", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0", } data = { "__LASTFOCUS": "", "__VIEWSTATE": VIEWSTATE, "__VIEWSTATEGENERATOR": VIEWSTATEGENERATOR, "__EVENTTARGET": "", "__EVENTARGUMENT": "", "__EVENTVALIDATION": EVENTVALIDATION, "txtCommpnayAccount": self.companyID, "txtWorkNO": self.user_name, "txtPWD": self.pass_word, "cbRmbPWD": "on", "hidBodyHeight": "483", "btnLogin": "", } r = self.session.post(self.login_url, headers=headers, data=data)
这里提取参数时使用了scrapy中的Selector,感觉挺好用的,尤其是封装的extract_first(),还可以设置默认值,相比于lxml少做了一些判断