節(jié)點交互
? ? ? ? ?selenium 可以驅(qū)動瀏覽器來執(zhí)行一些操作,也就是說可以讓瀏覽器模仿執(zhí)行一些操作。比較常見的用法有:輸入文字 send_keys() 方法,清空文字方法 clear() 方法,點擊按鈕時用 click() 方法。
示例如下:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
input_q = driver.find_element_by_id('kw')
input_q.send_keys('iphone')
time.sleep(2)
input_q.clear()
input_q.send_keys('ipad')
button = driver.find_element_by_class_name('bg')
button.click()
time.sleep(3)
driver.close()
? ? ? ? ? 這里首先驅(qū)動了瀏覽器打開了百度,然后用find_element_by_id() 方法獲取搜索框,然后用 send_keys()方法輸入 iphone 文字,等待兩秒后使用 clear() 方法清空了搜索框的內(nèi)容,再次調(diào)用了 send_keys() 方法輸入 ipad 文字,之后再用 find_element_by_class_name() 方法獲取搜索按鈕,最后調(diào)用 click() 方法完成搜索動作。
通過上面的方法,我們就完成了一些常見節(jié)點操作,更多的操作可以參見官方文檔的交互動作介紹:https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement
動作鏈
? ? ? ? ? ?在上面的實例中,一些交互動作都是針對某個節(jié)點執(zhí)行的。比如,對于輸入框,我們調(diào)用它輸入文字和清空文字的方法;對于按鈕,就調(diào)用了點擊方法。其實還有另外一些操作,他們沒有特定的執(zhí)行對象,比如鼠標拖拽,鍵盤按鍵等,這些動作用另一種方式來執(zhí)行,那就是動作練。
比如,現(xiàn)在實現(xiàn)一個節(jié)點的拖拽操作,將某個節(jié)點從一處拖拽到另外一處可以這樣實現(xiàn):http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable
from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Chrome()
base_url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(base_url)
browser.switch_to.frame('iframeResult')
source = browser.find_element_by_id('draggable')
target = browser.find_element_by_id('droppable')
actions = ActionChains(browser)
actions.drag_and_drop(source,target)
actions.perform()
? ? ? ? ?首先,代開網(wǎng)頁中的一個拖拽實例,然后依次選中要拖拽的節(jié)點和拖拽到的目標節(jié)點,接著聲明 ActionChains 對象并將其賦值為 actions 變量,然后通過調(diào)用 actions 變量的 drag_and_drop() 方法,在調(diào)用 perfrom() 方法執(zhí)行動作,此時就完成了拖拽操作,如下圖:

