1. 从定位元素开始
1、id定位 |
find_element_by_id() |
|
2、name定位 |
find_element_by_name() |
|
3、class定位 |
find_element_by_class_name() |
|
4、tag定位 |
find_element_by_tag_name() |
|
5、link定位 |
find_element_by_link_text() |
|
7、xpath定位 |
find_element_by_xpath() |
7.1 绝对路径定位 |
find_element_by_xpath(“/html/body/div/a”) |
7.2 利用元素属性定位 |
find_element_by_xpath(“//input [@id= ''kw]”) |
7.3 层级和属性定位 |
find_element_by_xpath(“//input [@id= ''kw] / input”) |
7.4 使用逻辑运算符 |
find_element_by_xpath(“//input [@id= ''kw and @class=‘s_ipt’]”) |
7.5 使用contains方法 |
find_element_by_xpath(“//input [contains(@class=‘s_ipt’)]/ input”) |
7.6 使用tesxt() 方法 |
find_element_by_xpath(“//a [contains(text(), '一个很长的')]”) |
|
8、CSS定位 |
find_element_by_css_selector() |
https://blog.csdn.net/galen2016/article/details/71106900
8.1 通过class属性定位 |
find_element_by_css_selector(‘.s_ipt’)
|
8.2 通过id属性定位
|
find_element_by_css_selector(‘#kw’)
|
8.3 通过标签名定位 |
find_element_by_css_selector(‘input’) |
8.4 通过父子关系定位 |
find_element_by_css_selector(‘span>span’) |
8.5 通过属性定位 |
find_element_by_css_selector(“[name=’kw’]”) |
8.6 组合定位 |
find_element_by_css_selector(“span.bg s_ipt_wr>input.s_ipt”) |
|
9、 用by定位 |
|
find_element()方法只用于定位元素,它需要两个参数,
- 第一个参数是定位的类型,由By提供
- 第二个参数是定位的具体方式
在使用By之前需要将By类导入。from selenium.webdriver.common.by import By
9.1 |
find_element(By.ID,”kw”) |
9.2 |
find_element(By.NAME,”WD”) |
9.3 |
find_element(By.CLASS_NAME,”s_ipt”) |
9.4 |
find_element(By.TAG_NAME,”input”) |
9.5 |
find_element(By.LINK_TEXT,”新闻”) |
9.6 |
find_element(By.PARTIAL_LINK_TEXT,”新”) |
9.7 |
find_element(By.XPATH,”//*[@class=’bg s_btn’]”) |
9.8 |
find_element(By.CSS_SELECTOR,”span.bg s_btn_wr>input#su”) |
|
2. 控制浏览器
1、控制浏览器大小 |
# 参数数字为像素点
|
driver.set_window_size(600, 600)
|
# 设置全屏显示
|
driver.maximize_window()
|
# 设置最小化浏览器
|
driver.minimize_window()
|
|
2、控制浏览器前进、后退、刷新 |
# 返回(后退)到百度首页
|
driver.back()
|
# 前进到新闻页 |
driver.forward() |
# 刷新界面 |
driver.refresh() |
|
|
3. WebDriver中的常见方法
Webdriver中操作元素方法 |
clear() |
清除输入框的默认内容 |
send_keys("xxx") |
在一个输入框里输入xx内容 |
click() |
点击一个按钮 |
submit() |
提交表单 |
|
WebElement接口常用方法 |
size |
返回元素的尺寸 |
size = driver.find_element_by_id("id").size |
text |
获取元素的文本 |
text = driver.find_element_by_id("id").text |
get_attribute(name) |
获得属性值 |
attribute = driver.find_element_by_id("id").get_attribute(‘type‘) |
is_displayed() |
设置该元素是否用户可见 |
isshow = driver.find_element_by_id("id").is_displayed() |
|
ActionChains类鼠标操作的常用方法 |
引入ActionChains类:from selenium.webdriver.common.action_chains import ActionChains
context_click() |
右击 |
RightClick = driver.find_element_by_id("id") ActionChains(driver).context_click(RightClick).perform() |
double_click() |
双击 |
DoubleClick = driver.find_element_by_name("name") ActionChains(driver).double_click(DoubleClick).perform() |
drag_and_drop(source, target) |
鼠标拖放 |
element = driver.find_element_by_name("name") target = driver.find_element_by_name("name") ActionChains(driver).drag_and_drop(element, target).perform() |
click_and_hold() |
按下鼠标左键在一个元素上 |
left = driver.find_element_by_name("name") ActionChains(driver).click_and_hold(left).perform() |
|
4. 鼠标操作
引入Keys类包:from selenium.webdriver.common.keys import Keys
send_keys() |
输入框输入内容 |
driver.find_element_by_id("id").send_keys("XXX")
|
send_keys(Keys.SPACE) |
输入空格 |
driver.find_element_by_id("id").send_keys(Keys.SPACE) |
send_keys(Keys.CONTROL,‘a‘) |
ctrl+a 全选输入框的内容 |
driver.find_element_by_id("id").send_keys(Keys.CONTROL,‘a‘) |
send_keys(Keys.CONTROL,‘x‘) |
ctrl+x 剪切输入框的内容 |
driver.find_element_by_id("id").send_keys(Keys.CONTROL,‘x‘) |
send_keys(Keys.CONTROL,‘v‘) |
ctrl+v 粘贴到输入框 |
driver.find_element_by_id("id").send_keys(Keys.CONTROL,‘v‘) |
send_keys(Keys.ENTER) |
回车代替点击 |
driver.find_element_by_id("id").send_keys(Keys.ENTER) |
send_keys(Keys.TAB) |
制表键(Tab) |
driver.find_element_by_id("id").send_keys(Keys.TAB) |
send_keys(Keys.ESCAPE) |
回退键(Esc) |
driver.find_element_by_id("id").send_keys(Keys.ESCAPE) |
send_keys(Keys.CONTROL,‘c‘) |
复制 |
driver.find_element_by_id("id").send_keys(Keys.CONTROL,‘c‘) |
|
5. 键盘操作
键盘操作先到导包:from selenium.webdriver.common.keys import Keys
send_keys(Keys.BACK_SPACE) |
删除键(BackSpace) |
send_keys(Keys.SPACE) |
空格键(Space) |
send_keys(Keys.TAB) |
制表键(Tab) |
send_keys(Keys.ESCAPE) |
回退键(Esc) |
end_keys(Keys.ENTER) |
车键(Enter) |
send_keys(Keys.CONTROL,‘a’) |
全选(Ctrl+A) |
send_keys(Keys.CONTROL,‘c’) |
复制(Ctrl+C) |
6. 获得验证信息
https://www.cnblogs.com/lirongyang/p/11457802.html
![](https://img2020.cnblogs.com/blog/1679444/202111/1679444-20211101152552235-1685333951.png)
7. 设置元素等待
https://blog.csdn.net/w68688686/article/details/103616417
WebDriver提供了两种类型的等待:显式等待和隐式等待。
1.显示等待:显示等待使WebDriver等待某个条件成立时继续执行,否则在达到最长时抛弃超时异常(TimeoutException)。
2.隐式等待:隐式登陆是通过一定的时长等待页面上某元素加载完成。如果超出了设置的时长元素还没有被加载,则抛出NoSuchElementException异常。WebDriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0.
8 定位一组元素
定位一组元素一般用于以下场景:
1. 批量操作元素,例如勾选页面上所有的复选框。
2. 先获取一组元素,再从这组对象中过虑出需要操作的元素。例如定位出页面上所有的checkbox,然后选择其中的一个进行操作。
9 多表单切换
若目前操作焦点在内层页面,需要切换回外层页面:
1. 跳回最外层的页面:driver.switch_to.default_content() -- 切换到最外层(对于多层页面,可通过该方法直接切换到最外层)
2. 跳回上层的页面:driver.switch_to.parent_frame() -- 进行向上的单层切换
10. 多窗口切换
说明:在WebDriver中封装了获取当前窗口句柄方法和获取所有窗口句柄的方法以及切换指定句柄窗口的方法;(句柄:英文handle,窗口的唯一识别码)
1). driver.current_window_handle --> 获取当前窗口句柄
2). driver.window_handles --> 获取所有窗口句柄
3). driver.switch_to.window(handle) --> 切换指定句柄窗口
11. 警告框处理
接受弹窗 driver.switch_to_alert().accept()
得到弹窗的文本消息,比如得到:请输入用户名!message=driver.switch_to_alert().text print(message)
取消按钮 driver.switch_to_alert().dismiss()
输入值 driver.switch_to_alert().send_keys(“hello”)
12.下拉框处理
S = Select(driver.find_element_by_name('cars')).select_by_value('saab')
select_by_index(self, index) |
# 以index属性值来查找匹配的元素并选择; |
select_by_value(self, value) |
# 以value属性值来查找该option并选择; |
select_by_visible_text(self, text) |
# 以text文本值来查找匹配的元素并选择; |
first_selected_option(self) |
# 选择第一个option 选项 |
13. 上传文件
1. 第一种方式,sendkeys()最简单的
2. 第二种方式,操作键盘 点击后弹出一个文件上传框,在文件名的输入框里,直接输入文件名,然后enter,
3. 第三种用Autoit使用
14. 下载文件
https://blog.csdn.net/cyjs1988/article/details/74988997
1. Firefox 文件下载 |
browser.download.dir |
指定下载路径 |
browser.download.folderList |
置成 2 表示使用自定义下载路径;设置成 0 表示下载到桌面;设置成 1 表示下载到默认路径 |
browser.download.folderList |
在开始下载时是否显示下载管理器 |
browser.helperApps.neverAsk.saveToDisk |
对所给出文件类型不再弹出框进行询问 |
|
2. Chrome 文件下载 |
download.default_directory |
设置下载路径 |
profile.default_content_settings.popups |
设置为 0 禁止弹出窗口
|
|
15. 操作Cookie
get_cookies()获得cookie信息
add_cookie(cookie_dict)添加
cookiedelete_cookie(name)删除特定(部分)的cookie
delete_all_cookies()删除所有的cookie
16. 调用JavaScript
![](https://img2020.cnblogs.com/blog/1679444/202111/1679444-20211101152930801-525885227.png)
17. 处理HTML5视频播放
![](https://img2020.cnblogs.com/blog/1679444/202111/1679444-20211101153002051-75722527.png)
18. 滑动解锁
https://www.cnblogs.com/kite123/p/11532484.html
![](https://img2020.cnblogs.com/blog/1679444/202111/1679444-20211101153034800-979089778.png)
19. 窗口截图
![](https://img2020.cnblogs.com/blog/1679444/202111/1679444-20211101153135251-383339475.png)
20. 关闭窗口
![](https://img2020.cnblogs.com/blog/1679444/202111/1679444-20211101153115286-1709793985.png)