0x00 写在前面
这次是记录学习过程中关于自动登录的案例,在这几天的学习中发现,很多情况下,我们都只有在登录的情况下才能看到我们想要的数据,所以自动登录是爬虫必不可少的一环
0x01 GitHub的登录
github登录网址:https://github.com/login
github的登录不需要验证码验证,也就不需要定位,直接post就行了,相对简单,就试了试不使用selenium,先用123测试一下发送数据的格式
在session下找到了post的数据
其中,用红框框起来的几条数据,看起来像是动态生成的,去网页源码里搜索一下
找到了位置,从而我们就得到了data里的所有数据。值得注意的是,这里是用了cookie在储存数据
而如果我们的request不带有cookie,登录的时候就会出现…
不能正常登录,所以我们要使用
session=requests.session()
来为网站创建一个会话对象,这样就能自动生成,储存cookie,从而正常登录,完整代码如下:
from lxml import etree
import requests
url='https://github.com/login'
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0"}
session=requests.session()#创建会话对象,后面的所有请求都由此对象发出
response=session.get(url=url,headers=headers)
response.encoding='utf-8'
tree=etree.HTML(response.text)
token=tree.xpath('//*[@name="authenticity_token"]/@value')[0]
#gaid=tree.xpath('//*[@class="js-octo-ga-id-input"]/@value')[0]
timestamp=tree.xpath('//*[@name="timestamp"]/@value')[0]
timestampsec=tree.xpath('//*[@name="timestamp_secret"]')[0]
data = {
'commit': 'Sign in',
'authenticity_token': token,
'ga_id':'929822435.1570627169',#可以看到本来我写了获取这个值的代码,但是我又发现这个值好像没变过,就直接写在这了
'login': 'github帐号',
'password': 'github密码',
'webauthn-support': 'supported',
'webauthn-iuvpaa-support':'unsupported',
'return_to:':'',
'required_field_05fd':'',#这里的05fd好像每次请求都不一样,但是好像是不影响登录,如果发现无法登录,可以试试post后查看对应参数并修改
'timestamp':timestamp,
'timestamp_secret':timestampsec
}
login=session