selenium超全教程(4)-持续更新中

如题所述

第1个回答  2022-07-31
单选比较好操作,先定位需要单选的某个元素,然后点击一下即可。

多选好像也比较容易,依次定位需要选择的元素,点击即可。

下拉框的操作相对复杂一些,需要用到Select模块。

先导入该类

在select模块中有以下定位方法

测试页面

然后,再演示下拉框的不同选择的方式

Selenium打开一个页面之后,默认是在父页面进行操作,此时如果这个页面还有子页面,想要获取子页面的节点元素信息则需要切换到子页面进行擦走,这时候switch_to.frame()就来了。如果想回到父页面,用switch_to.parent_frame()即可。

既然是模拟浏览器操作,自然也就需要能模拟鼠标的一些操作了,这里需要导入ActionChains 类。

左键

这个其实就是页面交互操作中的点击click()操作。

右键

context_click()

在上述操作中

双击

double_click()

drag_and_drop(source,target)拖拽操作嘛,开始位置和结束位置需要被指定,这个常用于滑块类验证码的操作之类。

selenium中的Keys()类提供了大部分的键盘操作方法,通过send_keys()方法来模拟键盘上的按键。

引入Keys类

常见的键盘操作

send_keys(Keys.BACK_SPACE):删除键(BackSpace)

send_keys(Keys.SPACE):空格键(Space)

send_keys(Keys.TAB):制表键(TAB)

send_keys(Keys.ESCAPE):回退键(ESCAPE)

send_keys(Keys.ENTER):回车键(ENTER)

send_keys(Keys.CONTRL,'a'):全选(Ctrl+A)

send_keys(Keys.CONTRL,'c'):复制(Ctrl+C)

send_keys(Keys.CONTRL,'x'):剪切(Ctrl+X)

send_keys(Keys.CONTRL,'v'):粘贴(Ctrl+V)

send_keys(Keys.F1):键盘F1

send_keys(Keys.F12):键盘F12

实例操作演示:

定位需要操作的元素,然后操作即可!

如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候尝试在get方法执行完成时获取网页源代码可能并非浏览器完全加载完成的页面。所以,这种情况下需要设置延时等待一定时间,确保全部节点都加载出来。

等待有三种方式:强制等待、隐式等待和显式等待

1.强制等待

直接time.sleep(n)强制等待n秒,在执行get方法之后执行。

2.隐式等待

implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常。

3. 显式等待

设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常。

WebDriverWait的参数说明:

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

driver: 浏览器驱动

timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)

poll_frequency: 每次检测的间隔时间,默认是0.5秒

ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常

until(method,message='')

method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False

message: 如果超时,抛出TimeoutException,将message传入异常

until_not(method,message='')

until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。

其他等待条件

还有一些操作,比如下拉进度条,模拟javaScript,使用execute_script方法来实现。

在selenium使用过程中,还可以很方便对Cookie进行获取、添加与删除等操作。

输出: