request和selenium模拟登录
Kale

操作系统课设需要在网页里面选题,学python很久了,但是都一直没用过selenium和request库,这次就决定用一下,写一个抢题脚本.

selenium模拟登陆

selenium是一个用于web应用程序测试的工具.运行时有可视化界面,可以自动化操作,于是想到可以用来模拟用户的点击操作.

用到了selenium里的 webdriver 首先抽象出一个浏览器变量,再通过 get 方法获取要登录的网址,接下来就可以进行操作了.

使用selenium的过程中我的思想主要是定位到具体的属性,然后传值或者点击,用以模拟用户的操作.

思路有了,首先定位到用户名,发现没有id和name属性,查到selenium有一个比较万能的方法: find_element_by_xpath 这是W3C定义的用来在XML文档中选择节点的语言,通过此方法可以通过条件匹配的方法定位到具体的标签等.

成功定位到用户名和密码以及登录的按钮,将值输入,模拟点击登录按钮即可成功登录.

接下来就是抢题了,一个 while true 解决问题,但是碰到了一个问题,如果只是写成 button.click() 放在循环里,运行几十次之后就会退出,达不到死循环的效果.网上查到了解决方案,但是还是不知道具体的原理,以后有时间再了解吧.
解决方案是写成 scri.execute_script("arguments[0].click();", button) ,scri是抽象的浏览器.
这样就可以模拟登录并且定位到某一具体的题目抢题了,思路很简单.

request模拟登录

一直很想用request做点什么,之前有了使用selenium抢题的经验,于是决定学习一下request.

还是选择一个网页进行登录,这次选择的网页是表单大师的网页,这个网页登录不需要输入验证码,比较容易实现.

首先输入错误的用户名和密码,打开开发者工具,点击登录,从network里可以看到 request headers 以及 request payload 前者记录了请求头以及代理等信息,后者记录了用户名以及密码的id.

接下来就很简单了,通过抓到的信息填好 useragent header postdataposturl ,再发一个post请求,参数里填上这些信息即可.

测试打印网页源码,成功打印.

这次只是简单地使用了selenium和request实现了模拟登录功能,以后有机会再进行深入学习吧.

使用Cookie绕过验证码

更新一下,在登录进一个网站后,网站判断用户身份用的是Cookie机制,cookie存在浏览器上,在向网页发出请求时会随着首部一起发送过去,服务端解析到cookie,确认用户身份,即不用登录.

所以可以使用Cookie来绕过验证码以及用户名和密码的输入,直接进入登录之后的页面.
步骤很简单,只需要将Cookie放进首部字典即可.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import requests


def login():
useragent = '这是代理'
header = {
'referer': 'http://my.hfut.edu.cn/',
'user-agent': useragent,
'Cookie': '这是cookie'
}
posturl = 'http://my.hfut.edu.cn/index.portal'
r = requests.get(posturl, headers=header)
print(r.text)


if __name__ == '__main__':
login()

打印登录后的页面:
avatar

  • 本文标题:request和selenium模拟登录
  • 本文作者:Kale
  • 创建时间:2019-10-02 17:32:17
  • 本文链接:https://kalew515.com/2019/10/02/request和selenium模拟登陆/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!