Selenium操控元素介绍:
Selenium操控元素必须要定位后才能执行,理论上Selenium可以模拟任何操作,比如单击、右击、滑动、滚动、复制粘贴、文本输入等。操作方式分为三大类:常规操作、鼠标事件操作、键盘事件操作。
常规操作:
常规操作包括文本清除、文本输入、单击元素、提交表单、获取元素值等,以百度首页为例(https://www.baidu.com/)具体使用方法入下:
import time
from selenium import webdriver
url='https://www.baidu.com/'
driver = webdriver.Chrome()
driver.get(url)
#定位到输入框并输入’selenium‘
driver.find_element_by_id('kw').send_keys('Selenium')
time.sleep(1)
#定位到百度一下并单击
driver.find_element_by_id('su').click()
time.sleep(2)
#定位到贴吧并点击跳转
driver.find_element_by_partial_link_text('贴吧').click()
time.sleep(3)
#定位selenium吧描述并获取其内容
text=driver.find_element_by_css_selector('#pagelet_frs-header\/pagelet\/head > div > div.head_content > div.card_top_wrap.clearfix.card_top_theme > div.card_top.clearfix > p').text
print(text)
time.sleep(3)
#定位到贴吧输入框并清除其中内容
driver.find_element_by_id('wd1').clear()
time.sleep(3)
driver.quit()
除了上面演示的操作外还有一些是比较常见的:
#submit用于表单提交
driver.find_element_by_id('X').submit()
#获取元素在页面中的坐标位置,格式为{'y':100,'x':200}
location = driver.find_element_by_id('X').location
#获取某个元素的属性,如获取X元素的id属性
attribute = driver.find_element_by_id('X').get_attribute('id')
# 判断元素在页面是否可见
res = driver.find_element_by_id('X').is_displayed()
# 判断元素是否被选,一般用于checkbox和radio
res = driver.find_element_by_id('X').is_selected()
from selenium.webdriver.support.select import Select
#根据下拉框的索引来选取
Select(driver.find_element_by_id('X')).select_by_index('1')
#根据下拉框的value属性来选取
Select(driver.find_element_by_id('X')).select_by_index('Python')
#根据下拉框的值来选取
Select(driver.find_element_by_id('X')).select_by_visible_text('Python3')
具体演示一些下拉框选取这个操作:
随便写了一个HTML的下拉框页面
首先需要定位到这个下拉框元素(记住不是定位它的子元素)
driver.find_element_by_name('ShippingMethod')
然后通过将其作为参数传入Select()类,再选择不同的方法进行下拉框选择(比如通过索引)
Select(driver.find_element_by_name('ShippingMethod')).select_by_index('2')
最终结果:
如果需要需要一些简单的HTML页面做练习可以到我的码云获取:我的仓库
鼠标事件操作:
鼠标事件操作需要Selenium的ActionChains类来实现,ActionChains中有很多鼠标操作方法,下面就列举一些常用的方法:
方法 | 说明 | 示例 |
---|---|---|
perform | 鼠标执行事件 | click(element).perform()执行这个单击事件 |
reset_actions | 取消鼠标事件 | click(element).reset_actions()取消这个点击事件 |
click | 鼠标单击 | click(element) |
click_and_hold | 长按鼠标左键 | click_and_hold(element) |
context_click | 长按鼠标右键 | context_click(element) |
double_click | 鼠标双击 | double_click(element) |
drag_and_drop | 对一个元素长按左键直到移至另一个元素后释放 | drag_and_drop(element1,element2) |
drag_and_drop_by_offset | 对元素长按左键并移动到指定坐标 | drag_and_drop_by_offset(element,x,y) |
move_to_element | 将鼠标移至某元素 | move_to_element(element) |
上述操作都需要将ActionChains实例化后才能使用:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
url='https://www.baidu.com/'
driver = webdriver.Chrome()
driver.get(url)
element = driver.find_element_by_id('X')
#实例化ActionChains并调用click_and_hold()方法,再调用perform执行这个事件
ActionChains(driver).click_and_hold(element).perform()
键盘事件操作:
键盘事件操作主要通过send_keys方法和Keys类中的快捷键共同完成,以百度首页搜索框为例介绍一下使用方法:
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
url='https://www.baidu.com/'
driver = webdriver.Chrome()
driver.get(url)
# 获取输入框元素
element = driver.find_element_by_id('kw')
# 输入'Selenium键盘操作Z'
element.send_keys('Selenium键盘操作Z')
time.sleep(2)
# 删除最后一个文字
element.send_keys(Keys.BACK_SPACE)
time.sleep(2)
#添加一个空格+‘介绍’
element.send_keys(Keys.SPACE)
element.send_keys('介绍')
time.sleep(2)
# Ctrl+a全选输入框中的内容
element.send_keys(Keys.CONTROL,'a')
time.sleep(2)
# Ctrl+x剪切输入框的内容
element.send_keys(Keys.CONTROL,'x')
time.sleep(2)
# Ctrl+v复制
element.send_keys(Keys.CONTROL,'v')
time.sleep(2)
# 回车
driver.find_element_by_id('su').send_keys(Keys.ENTER)