操作系统课设需要在网页里面选题,学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
postdata
和 posturl
,再发一个post请求,参数里填上这些信息即可.
测试打印网页源码,成功打印.
这次只是简单地使用了selenium和request实现了模拟登录功能,以后有机会再进行深入学习吧.
使用Cookie绕过验证码
更新一下,在登录进一个网站后,网站判断用户身份用的是Cookie机制,cookie存在浏览器上,在向网页发出请求时会随着首部一起发送过去,服务端解析到cookie,确认用户身份,即不用登录.
所以可以使用Cookie来绕过验证码以及用户名和密码的输入,直接进入登录之后的页面.
步骤很简单,只需要将Cookie放进首部字典即可.
1 | import requests |
打印登录后的页面:
- 本文标题:request和selenium模拟登录
- 本文作者:Kale
- 创建时间:2019-10-02 17:32:17
- 本文链接:https://kalew515.com/2019/10/02/request和selenium模拟登陆/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!