开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践: Selenium 3】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15411
Selenium 3
内容介绍:
一、 获取元素信息
二、 获取ID、位置、标签名、大小
三、 Frame
四、 等待
一、获取元素信息
然后接下来我们来看一下怎样来获取这个元素的信息,比如说我们现在已经用find element BYD等等之类的获取到了一些网页的一些相关的一些元素,那么我们如何来获取它的,它的一些属性,一些文本等等之类的。比如说在这里,我们在这里就是一个获取知乎的一个logo信息,然后再把里面的一个属性来打印出来。
看一下,比如说我们首先运行一下这个程序,然后它会弹出一个浏览器,然后可以看到这里,它就会输出了一个class,比如说get tribute class,那么它实际上这里是查找了这个,这个ID为CH,然后topic,然后就是这个超链接,那么在这里,我们就用这个get a tribute这个方法,然后插入这个class。
这一个属性,然后这样的话,我们就把这个它的plus这个属性,然后输出出来了,那么可以看到这个输出的这结果,也是没问题,那么我们如何获取这个文本值?
比如说我们刚才可以获取它的属性了,然后另外一个非常重要的话就是获取它的文本值了,那么我们还是用这个网址,然后在这里,是查找了这个托盘的question这么一个元素,然后我们把它的文本值来获取出来,然后我们首先看一下这个页面儿,先把先把这一个元素我们给它找到,那么这个元素,实际上是右边的这个提供按钮,它就是button,然后它的里面内容。
就是自由操盘的question,然后这里,它就是通过这个class name,那么它这个class name实际上也是一样的,也是自由操盘的question,然后它把这个第2个text输入出来,那么这样的话,就会获取它的文本值,那么我们运行一下好,那可以看到这里,它就是正常的输出了,这两个字,那么就是说它正常的。比如说这个标签里面的。
二、获取 ID、位置、标签名、大小
然后接下来我们来看一下怎样获取另外的一些信息,比如说获取的ID,或者它的location,获取它的一些标签的名,获取它的大小等等之类的。那么这里,也有一些相关的API,你可以直接调用ID,Location,它的代码size等等之类的,也会获取它的一些相关的信息。在这里,你就直接来演示一下,比如说它ID是这个,然后它的位置,那么这个就是它在浏览器里的这个位置。
它的内部,比如说它的标签名,还有它的size,就是它的浏览器里面,它是占多少小数,那么它的高度,宽度之类的都可以给它蹦出来。
三、Frame
那我们再看一下这个frame,也就是说这个frame它可能在网页里面,会出现比较频繁,但是,如果出现这个frame,我们在做一些元素筛选的时候,可能会导致一些不太方便的问题,比如说这个frame,它是相当于成了一个独立的网页,那么我们在户籍的这个frame里面,想要查找这个子元素的这个frame,然后实际上是必须要切换到这个frame里面才可以进行查找,那么否则你是不能完成这个元素的查找的。所以说在这里,我们就用一个实例来验证一下怎样来切换这个负元素。怎样切换到自元素的frame,那么我们首先看一下这个网址,那么这个,还是刚才的那个拖拽的那个网址,那么我们首先请求一下这个网址,然后接下来就要用switch to,然后点frame,然后这个frame,就是这个传入这个frame的ID话就会切换到这个frame,
接下来,我们可以看一下,也就说刚才我们把这个元素,获取出来了,获取出来了,然后这个它实际上是在这么一个I free里面,那么我们接下来如果在这个I frame里面,想要获取外面的这个元素,那是不是就是不能获取了,那么他可能就会报一些错误,那么在这里,我们就尝试获取这么一个logo,那么很可能他会报一个no such element exception,也就是说他找不到这个元素的这么一个错误,所以在这里,我们加了一个try except more回来一下,如果他找不到这个logo,那就说明你不能在这个词frame里面查找full frame,For frame,那么这样的话就会抛出一个错误,比如说找不到这么一个logo,那么最后,我们再调用一下switch to,然后parent frame,那么这样的话,它就会切换到这个full frame。然后接下来我们再查找这个logo,那么它应该就会正常的查找出来了,那么可以看到这个logo,它实际上是在外面的这个,Frame里面,那么这这个,实际上它是在里面的这个frame里面,里面它是不能查找到外面这个后这个logo的,然后我们切换到外面,那么才能查找到这个logo,那么我们运行的是在哪。那么也就是说,这里这个地方它应该会首先显示一个no logo,然后再把这个logo这个名称打印出来,那么可以看到,这个运行结果和我们想的是完全一致,那么也就是说我们当在这个支数rem里面,想要获取外面的这个元素的话,它是获取不到的,那么我们必须用一个switch to,然后切换到一些frame里面,然后才可以进行元素的获取,那么切换到外面之后,我们才可以获取这个 Frame 的logo就成功了。
四、等待
接下来我们再看一下元素等待的一个相关操作,因为我们在做那个排序的时候,可能有一些Ajax请求,那么这些Ajax请求,实际上就是说他不会管你这个Slam有没有完成这个网页加载,那么也就是说这个Slam,它只是把基本的这个框架里面加载出来。
如果有一些后续的Ajax请求,那可能它会一些其他的一些操作,那可能他有一系列还没有加载完全,那么这样的话,如果你在进行操作的话,他可能会导致一些问题,那么在这里,你就需要加一些等待,然后延长一个时间,把确保这个元素都已经完全加载出来之后,然后你再进行一个操作,然后这样的话,你的这个异常基本上就不会出现了。那么这个等待,它就会分为两种,一种是隐式等待,那么另一种就是显示等待。
那么隐式等待,就是说我们到一定的时候,发现这个元素它还没有,就是叫它出来,那么你就继续等待你指定的这一个时间,然后如果超出了这个时间,还是要得到这个元素的话,那么它就会抛出异常,那么如果,突然就是说它没有到这个需要等待的时候,那么它就已经出现的话,那么它就会立即等待,那么这个隐式等待的时间,比如说摩尔为零,那么你也可以,你就可以调用这个方法。然后传入这个等待的这个时间,然后我就可以实现这个智能化了,然后在这里,我们就用这个知乎的这么一个网址来演示一下。然后就是说,如果这个网速特别慢的话,那么这个元素如果还没有加载出来,那么它会额外的再等待十秒,然后看它有没有加载出来,如果它已经加载出来了,那么它就不会等待了,那么就直接返回,那么看一下这个结果。
那么当前的网速应该是没什么问题,那么它会直接的返回这个网页元素,那么这个也是存在,那么其实就是加不加没有必要,因为我们的这个在规定的时间内加载完成,那么所需的时间是非常的短的,所以说没有必要那么。如果你在网速特别慢的情况下,你可以加一个这样的时代,然后,然后来确保你的这个元素是正常的交代出来的。
另外,这里还有一个比较常用的一个办法,就是显示等待。那么这个显示等待,就是说你指定一个等待条件,然后还指定一个最长等待时间,那么他会在这个最长的等待时间内判断这个条件是否成立,那么如果成立,那么他就会立即返回,那么如果不成立,他会一直等待,然后直到等待到这个最长的这个等待时间,那么如果还是不满足这个条件,那么他就会抛出这个异常如。
如果在这个等待时间内,那么满足了这个条件,那么它就会正常的发挥,所以说这个的话,它有一些非常灵活的一些判断条件,比如说在下面我就列出了一些,Tighter with,比如说标题是某个内容,然后还有这里this business或elementary,然后这个的话就是说这个元素就已经就判断它是否是可见的,然后比如说这里text_to_be present_in_element,那么这里,就是说某个元素文本里面包含某个文字,那么也就是说判断某一个元素里面,它这个文字是否已经给它加载出来了。
还有这个element _to_be_collectable,那么比如说它的这个元素是可点击的,比如说一般你可以用来判断一个按钮,这个它是否已经变成一个可点击的状态了,那么这样的话,就是确保你接下来的一些交互动作是可以正常的运行的。
那么在这里,举一个例子,首先声明了一个right driver great这么一个对象,然后第一个参数,就是把这个brother这个对象传过来。第二个,就是传入一个最长的等待时间,然后接下来,我们就是利用不影响tell这么一个方法,然后传入这个
present_to_be_element_location 的,比如说传入一些等待条件,然后它的参数是以上是一些原组类型,那么第一个,就是这个换,然后第二个元素,就是这个选择器,那么就是这样的话,就可以通过它,然后制定一个显示等待的一个条件,然后如果获取到这个元素,那么它就会复制成这个input,那么如果没有获取到这个元素,那么它就会抛出这个异常,接下来,我们就获取了这个输入框,然后又获取到了这个这个按钮,然后再把这两个然后打印输出出来。
那么在这里的两个等待条件,就是一个是判断它是否已经出现了,然后下面是判断它是否是可点击的,那么一般这可点击不可点击,就是用来判断这个按钮的。那么在这里,我们运行一下这个程序。
那可以看到在这里,它就出现了一个淘宝的这么一个页面儿,然后接下来,它就输出了两个web element。这个输入框的另外一个就是这个按钮,那么这个就是一些显示等待的一些条件,那么这些条件,实际上,在做一些等待判断的时候是非常的有用的,那么详细的一些操作,一些API等等,可以查看一下然后可以看一下这些相应的一些等待条件,还有它传传的一些参数是什么,传元组,还是传一些元素的引用等等之类的,我们可以看一下这些相应的这些API的解释。