通过id定位:find_element_by_id()
通过 name 定位:find_element_by_name()
通过 tag 定位:find_element_by_tag_name()
通过 class 定位:find_element_by_class_name()
通过 css 定位:find_element_by_css_selector()
通过 link 定位:find_element_by_link_text()
通过 partial_link 定位: find_element_by_partial_link_text()
通过 xpath 定位:find_element_by_xpath()
XPath语法
表达式 |
描述 |
nodename(节点名称) |
选取此节点的所有子节点 |
/ |
从根节点选取 |
// |
从匹配选择的当前节点 选取所有符合的节点 |
. |
选取当前节点 |
.. |
选取当前节点的父节点 |
@ |
选取属性 |
* |
匹配任何元素节点 |
@* |
匹配任何属性节点 |
node() |
匹配任何类型的节点 |
CSS选择器语法
表达式 |
示例 |
示例说明 |
.class |
.info |
选择所有class="info"的元素 |
#id |
#firstname |
选择所有id="firstname"的元素 |
* |
* |
选择所有元素 |
element |
p |
选择所有<p>元素 |
element, element |
div, p |
选择所有<div>元素和<p>元素 |
element element |
div p |
选择<div>元素内的所有<p>元素 |
element>element |
div>p |
选择所有父级是 <div> 元素的 <p> 元素 |
element+element |
div+p |
选择所有紧跟在 <div> 元素之后的第一个 <p> 元素 |
通过xpath中id定位input框
# 通过xpath里的id定位
driver.find_element_by_xpath('//*[@id="app"]/div/form/div[1]/div/div/input').clear()
driver.find_element_by_xpath('//*[@id="app"]/div/form/div[1]/div/div/input').send_keys('admin')
![](https://img.haomeiwen.com/i18256099/8c38902da4e10094.png)
image.png
通过xpath中class定位
driver.find_element_by_xpath('//*[@class="el-pager"]/li[3]').click()
获取div中的内容用text
# 获取div中的内容用text
value = driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/section/div/form/div/div[1]/div/div/div[2]').text
获取input框中的内容使用get_attribute('value')
test_text = driver.find_element_by_css_selector('.el-form>div:nth-child(1)>div>div>input').get_attribute('value')
通过selector选择器定位button,存在多个类时,类之间用.(点)
# 定位button按钮
driver.find_element_by_css_selector('.el-button.el-button--primary.el-button--mini.is-plain').click()
![](https://img.haomeiwen.com/i18256099/9d6ef5a5297e3497.png)
image.png
通过selector选择器定位input,同一层级存在多个相同节点时,使用element:nth-child(num)来取相应节点
# 定位input框
driver.find_element_by_css_selector('.el-form>div:nth-child(1)>div>div>input').send_keys('test新项目')
![](https://img.haomeiwen.com/i18256099/8e74d5a10af608bb.png)
image.png
同一层级多个元素时,选择其中一个时,使用selecter和xpath定位
# 获取第一个class=el-table__row下的所有标签
td_list = driver.find_elements_by_css_selector('.el-table__row:nth-child(1)>*')
td_list2 = driver.find_elements_by_xpath('//*[@class="el-table__row"][1]/*')
print(len(td_list), len(td_list2))
上传图片,需先安装pywin32,命令:pip install pywin32
import win32gui
import win32con
# FindWindow(param1,param2):param1需要传入窗口的类名,param2需要传入窗口的标题,自顶层窗口(也就是桌面)开始搜索条件匹配的窗体
dialog = win32gui.FindWindow("#32770", "打开") # 一级窗口
# FindWindowEx(param1,param2,param3,param4),查找子窗体
# param1不为0,则搜索句柄为param1窗体下的子窗体
# param2不为0,按照顺序从param2向后开始搜索子窗体
# param3窗体的类名
# param4窗口的名字
ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None) # 二级窗口
comboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, "ComboBox", None) # 三级窗口
edit = win32gui.FindWindowEx(comboBox, 0, 'Edit', None) # 找到目标文本框
button = win32gui.FindWindowEx(dialog, 0, 'Button', None) # 找到打开按钮
time.sleep(1)
# SendMessage(param1,param2,param3,param4)发送目标文本到文本框
# param1:接收消息的句柄
# param2:指定发送的消息
# param3:none
# param3:发送内容
win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, r'F:\picture\ps\2.png')
time.sleep(1)
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) # 点击打开按钮
![](https://img.haomeiwen.com/i18256099/9a5f278dc70203fc.png)
image.png
获取元素的长度使用len(),要使用find_elements
# 使用driver.find_elements来获取元素的个数,driver.find_elements返回的是多个元素,driver.find_element返回的是单个元素
element_list = driver.find_elements_by_css_selector('.number')
li_len = str(len(element_list))
鼠标点击事件
from selenium.webdriver.common.action_chains import ActionChains
# 鼠标左键操作
action = ActionChains(driver)
action.click(driver.find_element_by_name('file')).perform()
网友评论