2020/04/09 02-异步请求处理和下拉框处理

web测试工具selenium,无头浏览器phantomjs,利用浏览器的功能读取到动态网页内容。这样做一些事情比较方便,(登录返回一个cookie,我们直接是直接复制cookie,往往是先登录拿到了cookie,再把cookie带上,然后request.session访问这个网页,网页看到这个session就放行了。但是登录过程模拟出来就很难,这样selenium+无头浏览器就可以做)
在这里插入图片描述
phantomjs直接用可执行文件即可

在这里插入图片描述
在这里插入图片描述
selenium安装一下即可使用,可以去调用它 一些接口,由这些借口转而调用浏览器的接口
在这里插入图片描述
selenium最重要的东西就2个,common,webdriver,可以操作浏览器,截图,访问,甚至可以解析html。是调用selenium来驱动浏览器,调用的是浏览器的功能,解析html很强,XPath,css全部支持

在这里插入图片描述
这是我们要搞定的东西

在这里插入图片描述
这里可以用urllib。parse下可以用urlencode,可以把中文转了,如果是字典,就可以转成谁等于谁的字符串
在这里插入图片描述
生成的文件准备跟时间相关
在这里插入图片描述
有时候同一个文件同一秒就会重名,所以加个随机数好一点
驱动,设置窗口

在这里插入图片描述
去获得结果,然后截图
在这里插入图片描述
加一下路径前缀,执行一下
在这里插入图片描述
内容也许需要异步的加载过来

在这里插入图片描述
就试试等一会能看到数据否
在这里插入图片描述
等一会就看到数据了

在这里插入图片描述
但是等时间毕竟比较笨,要是有结果,这些元素都会存在

在这里插入图片描述
如果页面有它说明数据就有了

在这里插入图片描述
这里b_results有6个

在这里插入图片描述
其实只有一个在html标签里
在这里插入图片描述
results已经包含所有结果了,只能在html里搜到1个,一般id属性,在html里都是独一份
在这里插入图片描述
刚才截图第一张的时候,内容不存在,有可能都没加载到DOM树当中

在这里插入图片描述
先看看如何遍历DOM树,driver.find_element_by_id找到元素会返回一个元素对象,找不到元素会返回一个no_such element这样的一个异常。所以加个try,作为异常 判断。
5秒前截图一张,5秒后截一张

在这里插入图片描述
在这里等5秒,两张图做比较

在这里插入图片描述
两张图的大小就说明,第一张肯定没有数据

在这里插入图片描述
空白
在这里插入图片描述
目前没有异常抛出,说明当前页面元素里,这个元素存在了,这些元素在了但是没显示出来,可以理解为元素准备好了,但是样式表还是display:none。
元素一直在页面内,但是通过样式控制来让你看到表格div

在这里插入图片描述

现在等几秒是一个解决方案

在这里插入图片描述
打印看看返回的元素,说明这里面确实是有内容的
在这里插入图片描述
有个和样式表有关联,是不是可以显示的

在这里插入图片描述
虽然能拿到元素,但是是不可显示的,通过元素搜索里面的内容可能就拿到了,但是想要看见它是看不见的,这种元素需要等一会,通过它的脚本运行完了,它的内容才会加载到DOM树里,通过is_displayed判断究竟是否可以呈现

在这里插入图片描述
试试写个循环,现在就不用等5秒来截图了
在这里插入图片描述
但是我们的速度太快了

在这里插入图片描述
每次等1秒看看
在这里插入图片描述
可以通过find_element_by_id函数,可以去解析里面的内容,还有很多类似的函数。
有些时候网页已经刷新了,然后发起了ajax请求到后台拿数据,有些时候还是需要几秒的时间,所以我们就可以判断这些标签元素返回没有,element有可能出错 ,element不是没有而是来不及渲染,就可以甩is_displayed判断是否已经呈现出来

在这里插入图片描述
加个break
在这里插入图片描述
这些就是如何获取网页内容,如何解析,如何判断页面元素是否存在,如何重试以及如果 获取元素失败得到异常应该如何处理,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里要用parse.urlencode把值转一下,有查询字符串最好用urlencode进行编码

在这里插入图片描述
在这里插入图片描述
下拉框已经老土 了,现在基本没人用,样子很难看
在这里插入图片描述
选择了地址就动了,其实整个页面重新做了一次请求了

在这里插入图片描述
全部重来一遍,等于重新发起请求,而且地址栏都变了
在这里插入图片描述以前是凑查询字符串来爬取内容

在这里插入图片描述
现在来模拟下拉框点击
在这里插入图片描述
先定位下拉框是谁,tag1,上面是form表单控件,这是要提交的,表单控件的名字是不能重复的,其实还是用post方法把你提交的值保留,tag1,tag2一看就是两级联动
lang编程语言,os系统,checkbox打钩的,
因为onchange就submit了

在这里插入图片描述
在这里插入图片描述
模拟需要知道界面里有什么东西,先把这样的地址拷贝
在这里插入图片描述我们需要找属性名称

在这里插入图片描述
这里有个关于网页ui界面显示有关的
在这里插入图片描述
在这里插入图片描述
select是要一个web元素
在这里插入图片描述
刚好找到的就是这个元素
在这里插入图片描述
下拉框在select中这里有value,在提交的时候会用上面的名字tag1,tag1的值是当前是几就是几,选择什么提交的值就是什么
在这里插入图片描述

在这里插入图片描述
作为下拉框,提交的时候只能是某一个值,value是提交后台用的,前提是控件有name,索引是在下拉框空间里显示的

在这里插入图片描述
一提交就onchange了,就会submit,然后查看两次地址变化current_url。寻找元素后,是select,为了操作select借助一个select对象,select对象可以提供方法,可以模拟操作select的change

在这里插入图片描述
在这里插入图片描述
地址就变了

在这里插入图片描述
图片上的内容确实变了
在这里插入图片描述
select的框处理是较为特殊的,处理select框就需要借助select类
在这里插入图片描述
大多数界面操作的东西都在支持的ui下面

在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/qq_42227818/article/details/105415419
今日推荐