用selenium做自動(dòng)化,有時(shí)候會(huì)遇到需要模擬鼠標(biāo)操作才能進(jìn)行的情況,比如單擊、雙擊、點(diǎn)擊鼠標(biāo)右鍵、拖拽(滑動(dòng)驗(yàn)證)等等。而selenium給我們提供了一個(gè)類來處理這類事件——ActionChains;
selenium.webdriver.common.action_chains.ActionChains(driver)
這個(gè)類基本能夠滿足我們所有對鼠標(biāo)操作的需求。
actionChains的基本使用:
首先需要了解ActionChains的執(zhí)行原理,當(dāng)你調(diào)用ActionChains的方法時(shí),不會(huì)立即執(zhí)行,而是會(huì)將所有的操作按順序存放在一個(gè)隊(duì)列里,當(dāng)你調(diào)用perform()方法時(shí),隊(duì)列中的時(shí)間會(huì)依次執(zhí)行。
這種情況下我們可以有兩種調(diào)用方法:
鏈?zhǔn)綄懛?/strong>
menu = driver.find_element_by_css_selector(".div1")
hidden_submenu = driver.find_element_by_css_selector(".div1 #menu1")
ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
分步寫法
menu = driver.find_element_by_css_selector(".div1")
hidden_submenu = driver.find_element_by_css_selector(".div1 #menu1")
actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
兩種寫法本質(zhì)是一樣的,ActionChains都會(huì)按照順序執(zhí)行所有的操作。
actionChains方法列表:
click(on_element=None) ——單擊鼠標(biāo)左鍵
click_and_hold(on_element=None) ——點(diǎn)擊鼠標(biāo)左鍵,不松開
context_click(on_element=None) ——點(diǎn)擊鼠標(biāo)右鍵
double_click(on_element=None) ——雙擊鼠標(biāo)左鍵
drag_and_drop(source, target) ——拖拽到某個(gè)元素然后松開
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某個(gè)坐標(biāo)然后松開
key_down(value, element=None) ——按下某個(gè)鍵盤上的鍵
key_up(value, element=None) ——松開某個(gè)鍵
move_by_offset(xoffset, yoffset) ——鼠標(biāo)從當(dāng)前位置移動(dòng)到某個(gè)坐標(biāo)
move_to_element(to_element) ——鼠標(biāo)移動(dòng)到某個(gè)元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移動(dòng)到距某個(gè)元素(左上角坐標(biāo))多少距離的位置
perform() ——執(zhí)行鏈中的所有動(dòng)作
release(on_element=None) ——在某個(gè)元素位置松開鼠標(biāo)左鍵
send_keys(*keys_to_send) ——發(fā)送某個(gè)鍵到當(dāng)前焦點(diǎn)的元素
send_keys_to_element(element, *keys_to_send) ——發(fā)送某個(gè)鍵到指定元素
示例代碼:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
try:
driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 1、往jd發(fā)送請求
driver.get('https://www.jd.com/')
# 找到輸入框輸入圍城
input_tag = driver.find_element_by_id('key')
input_tag.send_keys('華為')
# 鍵盤回車
input_tag.send_keys(Keys.ENTER)
time.sleep(2)
# 找到輸入框輸入墨菲定
input_tag = driver.find_element_by_id('key')
input_tag.clear()
input_tag.send_keys('樊登讀書')
# 找到搜索按鈕點(diǎn)擊搜索
button = driver.find_element_by_class_name('button')
button.click()
time.sleep(10)
finally:
driver.close()
或者前進(jìn)后退相關(guān)
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.cnblogs.com/xuanyuan/')
browser.find_element_by_partial_link_text('我是如何把計(jì)算機(jī)網(wǎng)絡(luò)考了100分的?').click()
time.sleep(3)
browser.back() # 后退
time.sleep(3)
browser.forward() # 前進(jìn)
time.sleep(5)
browser.close()