主要框架及技术
1.第一个selenium例子
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.bilibili.com")
driver.find_element(By.CLASS_NAME,"nav-search-input").send_keys("你好,selenium")
driver.find_element(By.CLASS_NAME,"nav-search-btn").click()
time.sleep(3)
2.selenium4底层刨析
3.元素定位方式
1.根据id定位
id一般是唯一的。可在浏览器F12开发者工具中console用document.getElementById()来验证是否有这个元素
2.根据CLASS_NAME定位
在根据CLASS_NAME定位时,有些class的名称中间有空格,不能直接根据名称定位,这样是错误用法,但是,将空格改为 . 就能找到
在抖音的搜索框中,其id名称明明为中间一个空格,实际却需要换成 . 才能成功找到。
3.根据tag_name定位
tag_name一般唯一,不常用,如果有多条该标签,默认为第一条。
4.根据name定位
一般表单有这个属性,用法与上面类似。实际用得也不多
5.通过LINK_TEXT或者PARTIAL_LINK_TEXT
主要用来定位a标签。(可点击的标签)
PARTIAL_LINK_TEXT为模糊匹配,用法与另一个类似。前后模糊匹配。
6.通过CSS_SELECTOR来定位(重点)
通过CSS_SELECTOR来定位(下)(重点)
可通过F12开发者工具复制selector。相对路径的方式。
7.通过XPATH定位
有相对路径和绝对路径两种定位方式。/ 为绝对路径 // 为相对路径
同级弟弟元素:
driver.find_element(By.XPATH,'//span[@class="demonstration" and text()="默认 click 触发子菜单"]/following-sibling::div/div/input').click()
同级哥哥元素:
driver.find_element(By.XPATH,'//span[@class="demonstration" and text()="默认 click 触发子菜单"]/preceding-sibling::div/div/input').click()
用法类似同级弟弟元素
4.不同元素定位方式
Radio单选框
checkbox复选框
Select选择器(下拉框)
普通select标签的下拉框:
异常下拉框(非select标签)通过模拟人类使用方式:
#select下拉框选择器
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
url = "https://www.iviewui.com/view-ui-plus/component/form/select"
option = webdriver.ChromeOptions()
option.add_argument(r"user-data-dir=C:\Users\Mercedes\AppData\Local\Google\Chrome\User Data")
driver = webdriver.Chrome(options=option)
driver.get(url)
driver.find_elements(By.CSS_SELECTOR,"div.ivu-select-selection")[1].click()
driver.find_elements(By.XPATH,"//li[text()='Paris']")[0].click()
time.sleep(3)
级联选择器定位
也可模拟人类操作。找到元素->点击重复此过程
日期选择器定位
其实可以定位到该元素,一般为input标签,然后send_keys()。
区间日期也可以通过send_keys()
弹框定位
一般有三种样式
alert普通提醒弹框
confirm带取消确定的弹框
driver.switch_to.alert.dismiss()
prompt带输入框的弹框
driver.switch_to.alert.send_keys()
文件上传自动化
若是input标签的上传按钮,可直接send_keys(r"")来发送文件绝对路径,然后点击上传按钮
python os包:
os.path.dirname() 该函数用于获取当前路径的上一级路径。
os.path.realpath(__file__) __file__相当于C语言中的内置宏__FILE__
os.path.join() 后面跟多参数,参数表示目录
文件下载自动化
可以自定义下载路径。
以下是os模块种检测是否存在某个文件或目录并将其删除的代码
通过点击下载按钮
#select下拉框选择器
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
url = "https://registry.npmmirror.com/binary.html?path=chromedriver/"
option = webdriver.ChromeOptions()
option.add_argument(r"user-data-dir=C:\Users\Mercedes\AppData\Local\Google\Chrome\User Data")
prefs = {"download.default_directory": "C:\\Users\\Mercedes\\PycharmProjects\\WebAutoTest\\file"}
option.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=option)
driver.get(url)
time.sleep(3)
driver.find_element(By.CSS_SELECTOR,'a[href="https://registry.npmmirror.com/-/binary/chromedriver/LATEST_RELEASE"]').click()
time.sleep(10)
iframe框架切换
frame标签、frameset标签、iframe标签。类似安卓中的fragment
frame一般结合frameset一起使用。
用于网页元素嵌套或者网页的元素之间分隔。
找到输入框调用clear方法用于清空输入框中的内容。
点击iframe中的元素需要转换到frame模式:frame中的参数可以为id,name,也可以为index,也可以为我们已经找到的元素变量
driver.switch_to.frame()