selenium ,web控件定位,常见操作,控件交互进阶
Posted CSR-kkk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium ,web控件定位,常见操作,控件交互进阶相关的知识,希望对你有一定的参考价值。
文章目录
控件定位
推荐使用顺序
id
selenium 自带 id 定位,通过元素 ID 属性进行定位
driver.find_element_by_id('su')
name
selenium 自带 name 定位,通过元素的 name 属性进行定位
driver.find_element_by_name('name')
XPATH
XML Path Language
用于解析 html 与 xml
缺点:速度相对慢
表达式 | 说明 |
---|---|
/ | 从根节点开始 或 当前节点的子元素 |
// | 从当前节点开始匹配所有的子孙节点 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性 |
//* | 选取所有元素 |
Chrome 浏览器 --> console:
$x('//*[@id="kw"]')
$x('//*[@id="s_tab"]//a[1]')
第一个
$x('//*[@id="s_tab"]//a[last()]')
倒数第一个
$x('//*[@id="s_tab"]//a[last()-1]')
倒数第二个
CSS Selector
速度比 Xpath 更快
选择器 | 例子 | 说明 |
---|---|---|
.class | .className | 选择 class=“className” 的所有元素 |
#id | #name | 选择 id=“name” 的所有元素 |
* | * | 选择所有元素 |
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>元素 |
[attribute] | [target] | 选择带有target 属性的所有元素 |
[attribute=value] | [target=_blank] | 选择 target="_blank"的所有元素 |
:nth-child(n) | a:nth-child(3) | 选择属于其父元素的第三个子元素的每个<a>元素 |
element~element2 | p~ul | 选择前面有<p>元素的每个<ul>元素 |
Selenium 用法
self.driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys("selenium")
self.driver.find_element(By.ID, "kw").send_keys("selenium")
self.driver.find_element(By.CSS_SELECTOR, "#su").click()
self.driver.find_element(By.CSS_SELECTOR, "[id=su]").click()
link
利用元素文字进行定位
driver.find_element_by_link_text('Selenium installation')
# 部分匹配
driver.find_element_by_partial_link_text('Selenium')
tag_name
通过dom中的标签定位
driver.find_element_by_tag_name('img')
*:尽量不要使用,重复元素过多
class_name
通过元素的 class 属性值进行定位
driver.find_element_by_class_name('cn')
常见操作
点击,输入,清除
driver.find_element_by_id('wd').send_keys('selenium')
dirver.find_element_by_id('su').click()
driver.find_element_by_name('wd').clear()
获取元素属性
ele = driver.find_element_by_id('su')
ele.get_attribute('value')
ele.size()
ele.location()
获取页面源代码
driver.page_source()
打开浏览器,设置窗口大小,刷新页面
driver.get('http://www.baidu.com')
driver.minimize_window() # 最小化
driver.maximize_window() # 最大化
关闭窗口、浏览器
driver.page_source()
交互
官方文档:https://selenium-python.readthedocs.io/api.html
ActionChains
执行PC端的 鼠标事件(点击,双击,右键,拖拽等)
原理:调用方法ActionChains(),将动作存入队列,使用perform()方法执行
driver = webdriver.Chrome()
action = ActionChains(dirver)
action.click()
action.perform()
表达式 | 说明 |
---|---|
click(on_element=None) | 鼠标左键点击 |
context_click(on_element=None) | 鼠标右键点击 |
double_click(on_element=None) | 鼠标双击 |
move_by_offset(xoffset, yoffset) | 指定鼠标移动到某个位置 |
move_to_element(to_element) | 将鼠标移动到指定元素(to_element) |
move_to_element_with_offset(to_element, xoffset, yoffset) | 移动鼠标到某个元素位置的偏移位置 |
drag_and_drop(source, target) | 将 source 元素拖拽到 target 元素上 |
drag_and_drop_by_offset(source, xoffset, yoffset) | 将目标拖动到指定位置 |
click_and_hold(on_element=None) | 按住鼠标左键不放 |
release(on_element=None) | 在指定元素释放,如无则原地释放 |
send_keys(*keys_to_send) | 键盘输入 |
send_keys(“name”) | 输入字符串”name“ |
send_keys(Keys.SPACE) | 键盘输入空格 |
key_down(value, element=None) | 按住某个键 |
key_up(value, element=None) | 松开某个键 |
perform() | 执行action |
举例:实现Ctrl+C
ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
TouchActions
模拟PC和移动端的手势操作(点击,滑动,拖拽,多点触控等)
配置:
opt = webdriver.ChromeOptions()
opt.add_experimental_option('w3c', False)
self.driver = webdriver.Chrome(chrome_options=opt)
详细方法,参数查看官方文档
https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.touch_actions
form 操作
与点击,输入等事件是一样的流程,不再赘述
以上是关于selenium ,web控件定位,常见操作,控件交互进阶的主要内容,如果未能解决你的问题,请参考以下文章
python+selenium web界面有一个输入框,点击弹出时间选择控件,输入框不让输入数字。如何定位并input