2020/04/09 03-模拟登陆和页面等待

试试是否能模拟键盘
在这里插入图片描述
这个是登录要用到的地址
在这里插入图片描述
现在借助selenium和phantomjs来搞定,这里id肯定也是不可重复的

在这里插入图片描述
form表单里面根本不关心是div还是table,下回提交,只要控件有name就带上数据
在这里插入图片描述
send_keys就是找id这个元素然后往里面送入键盘key,也就是模拟键盘输入
在这里插入图片描述

在这里插入图片描述
先输入账号密码试一下
在这里插入图片描述
在这里插入图片描述
现在就看到输入的账号密码了

在这里插入图片描述
敲回车需要引入一个特殊键
在这里插入图片描述
特殊键ENTER,然后再看当前的url
在这里插入图片描述
第三幅图就对了

在这里插入图片描述
你用session访问没有办法解决登录的问题,那时登录没办法模拟,现在可以把验证码的图片拿到,然后可以input把验证码输入进去。
但是如果是有鼠标滑块,那个基本没有好的解决方案

现在登录成功应该有cookie,看看是否能拿到

在这里插入图片描述
拿到cookie后,使命就完成了,就可以把这个cookie传给requests写好的爬虫,为了防止别人封你,你的爬取速度要控制下
在这里插入图片描述
先拿一次cookie
在这里插入图片描述
因为跳转需要时间,或者去判断右上角出来退出按钮没有

在这里插入图片描述
在这里插入图片描述
有了这个OSCid就成
在这里插入图片描述
中间不需要的可以注释
在这里插入图片描述
现在已经是免登陆的cookie了
在这里插入图片描述
这个cookie带上之后让它访问登录页不登录了说明就成功了,现在就是想不用session,每次就用保存好的cookie往上传

登录首页如果打的cookie是ok的就直接跳转了

在这里插入图片描述

上面是浏览器,下面是全部用库来实现了
在这里插入图片描述
这里也打印一下地址
在这里插入图片描述
上面是不带cookie的,下面试试带上cookie的
在这里插入图片描述
request函数这里有个cookies参数,放字典或者喝是cookieJar,有的时候可以用cookiejar来做
在这里插入图片描述
找到快速向导

在这里插入图片描述
在这里插入图片描述
推荐使用下面这种方式
在这里插入图片描述

在这里插入图片描述
set就是kv,等于写字典了
在这里插入图片描述
列表遍历就是一个个字典
在这里插入图片描述
可以把里面的值拿出来,直接写jar.set
在这里插入图片描述
首先先把name和value拿过去,其他的先不管
在这里插入图片描述
最后得到一个jar,类似上面的,愿意的话也具有把domain和path的值带上,可以带可以不带,上回写request的时候,从浏览器提取放到了postman里,没有带domain和path,实际上带上kv值就ok了
在这里插入图片描述
带上cookie和没带上cookie
在这里插入图片描述
在这里插入图片描述
第一次没带上cookie以为你没登录,第二次带上cookie了就登录了
在这里插入图片描述
苦于写到文件里看看

在这里插入图片描述
找到退出就说明确实是登录了

在这里插入图片描述
可以用这个生产出一个cookie,然后拿着这个cookie用request爬取登录后才能访问的信息了
在这里插入图片描述
现在就可以连成一体了
在这里插入图片描述
上面的打开,这样就链接载一起了
在这里插入图片描述分割线上面是操作浏览器,下面就直接用库来web访问了,两种爬取方式不一样

在这里插入图片描述
用这样就可以实现完整的页面爬取,再也不用想办法绕过了
在这里插入图片描述
但是有些验证码很难,在爬虫 界,除非你训练的AI很好,否则很难斗过去,我们就需要像其他办法。有时候移动端暴露出来的接口更好去爬取,这就需要做一些代理,用移动端访问的时候做一些代理,然后过滤代理的地址。
公开数据可以爬取,但是涉及到用户隐私最好不要碰

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
元素如果可以点击直接调用.click即可

获得cookie直接交给requests,再requests之前获得了cookie对象,将这个cookie对象送给requests
在这里插入图片描述
requests拿到后就可以每次带上这个cookie,最后把信息获取到

在这里插入图片描述
这就是利用webdriver和selenium提供的操作浏览器的接口替我们模拟登录,和去获取模拟信息,不仅可以分析网页,还能拿到数据给爬虫或者分析程序进行处理。
但是selenium速度较慢,可以适当和requests结合起来

页面等待

页面等待的事情经常出现,比如ajax后加载的,表格里的数据还在转圈,没有加载出来,我们可以循环访问,但是这里提供了两种方式来等待页面元素加载,等待条件写的很灵活
在这里插入图片描述
页面等待技术就是为了,后加载的数据等待时间长,所以想办法解决,之前简单用time。sleep这样是可以的,但毕竟不搞基,selenium提供了俩种方式,显示等待和隐式等待。

隐式等待,等待特定的事件,显式等待,指定 一个条件,一直等到这个条件满足后继续执行,也可以设置超时事件,超时会抛异常

在这里插入图片描述
在这里插入图片描述
显式等待语法
在这里插入图片描述
有一些页面加载的时候,不显示就不加载了,鼠标滚下来才下载
在这里插入图片描述
这里叫显式的等待,需要用一个webdriverwait,这就是显式等待要调用的类,这个类要告诉它等待哪个driver驱动的浏览器,后面10可以 写时间,等10秒。
until直到什么时间为止,

在这里插入图片描述
find_element_byid可以写成这样
在这里插入图片描述
加了括号,送到里面去的,可能是个元组

在这里插入图片描述
说是在这个驱动器上等多久,到了什么时间,到什么条件满足为止(元素定位到,并且能够实现出来)

在这里插入图片描述
通过id找到的元素,已经加载到dom当中了,但不保证是可见的,比如有些div的样式是hidden的,元素是在dom树里,它是不可见的。
在这里插入图片描述
看看有多少选择
在这里插入图片描述
看当前页面的title包含了什么没有

在这里插入图片描述
最常用的就是这两个

在这里插入图片描述
判断某个元素是否被加载到了dom中,并不代表元素一定可见
在这里插入图片描述
判断元素是否可见。不是隐藏的,宽高也不是0
在这里插入图片描述
在这里插入图片描述
判断某个元素的text是否包含字符串

在这里插入图片描述
不存在dom树或者不可见

在这里插入图片描述
元素可以被点击,并且可见,这样可以判断有没有按钮去点击
在这里插入图片描述
下拉框里元素有没有被选择,下拉框有两种方式,一种是往下点就出来,还有是固定高度里面可以选择好几项
在这里插入图片描述
现在在url中,想要调用这个框子
在这里插入图片描述
这个框子就是inp-query

在这里插入图片描述
这样我们就找到搜索框了

在这里插入图片描述
现在可以等一段时间招搜索款框,找不到会暴露异常,现在去这个页面招搜索框,等10秒,不一定要呈现,但是一定要located定位到它,这个元素已经加到dom树中了,然后通过id去找
在这里插入图片描述
告诉你显式和隐式的等待
在这里插入图片描述
在这里插入图片描述
这种就不是机械式的等待,还可以设定超时时间。
在这里插入图片描述
试试找不到会做些什么在这里插入图片描述
这两种用法相似,也就下面需要放元组

在这里插入图片描述
超时等不到了就报错
在这里插入图片描述
在这里插入图片描述
找到元素后,可以输入下,看看能不能搜索相应的电影

在这里插入图片描述
在这里插入图片描述
这样就找到了

在这里插入图片描述
上面是显式的

隐式的比较简单,在拿到driver的时候,
在这里插入图片描述
这里的10的意思就是但凡有找不到东西的,就等10秒
在这里插入图片描述
看看中间会不会等10秒,注释掉显式等待

在这里插入图片描述
一样也搜到了

在这里插入图片描述
搜索一个不存在的
在这里插入图片描述
等待可以用两种方式解决,显式的和隐式的,显式的相当于做好一个配置,只要以后用的时候出现了找不到的情况,就会等待,等待规定时间 还是没找到,就不等了
在这里插入图片描述
find没找到就是报,nosuchelement
在这里插入图片描述
只要有这个隐式,相当于统一配置找不到就报nosuchelement
在这里插入图片描述
如果在意内容还是建议采用等待的方式,其实用重复次数还是time.sleep,其实就是现在的隐式等待方式

在这里插入图片描述
复杂一点就用显式等待
在这里插入图片描述
显式等待的EC就是expected-_conditions期望等到的条件是什么,

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
显式等待的时候默认是每0.5秒去查看一次

在这里插入图片描述

在这里插入图片描述
webdriver是selenium的核心模块,从selenium2开始就是最重要的编程核心接口,驱动浏览器全靠这个包:
可以打开url,可以跟踪跳转,可以返回当前页面的实际URL
获取页面title
处理cookie
控制浏览器 操作,例如前进、后退、刷新、关闭,最大化等(其实是做web自动化要做这个事情,变大变小看看网页显示是否变形)
执行js脚本
在DOM中搜素页面元素web element,指定的或一批,find系方法
操作网页元素:
click可以点击
select模拟下拉框操作
send_keys键盘输入
text 获取元素文字
get_attribute 获取元素的属性

selenium是通过webdriver来驱动公祖,浏览器是一个独立的浏览器进程。两个进程,是有进程间的通信 。(js是在浏览器内部调用,跟selenium是不同的)
在这里插入图片描述

发布了243 篇原创文章 · 获赞 6 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_42227818/article/details/105426487