节点交互
selenium 可以驱动浏览器来执行一些操作,也就是说可以让浏览器模仿执行一些操作。比较常见的用法有:输入文字 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()
这里首先驱动了浏览器打开了百度,然后用find_element_by_id() 方法获取搜索框,然后用 send_keys()方法输入 iphone 文字,等待两秒后使用 clear() 方法清空了搜索框的内容,再次调用了 send_keys() 方法输入 ipad 文字,之后再用 find_element_by_class_name() 方法获取搜索按钮,最后调用 click() 方法完成搜索动作。
通过上面的方法,我们就完成了一些常见节点操作,更多的操作可以参见官方文档的交互动作介绍:https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement
动作链
在上面的实例中,一些交互动作都是针对某个节点执行的。比如,对于输入框,我们调用它输入文字和清空文字的方法;对于按钮,就调用了点击方法。其实还有另外一些操作,他们没有特定的执行对象,比如鼠标拖拽,键盘按键等,这些动作用另一种方式来执行,那就是动作练。
比如,现在实现一个节点的拖拽操作,将某个节点从一处拖拽到另外一处可以这样实现: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()
首先,代开网页中的一个拖拽实例,然后依次选中要拖拽的节点和拖拽到的目标节点,接着声明 ActionChains 对象并将其赋值为 actions 变量,然后通过调用 actions 变量的 drag_and_drop() 方法,在调用 perfrom() 方法执行动作,此时就完成了拖拽操作,如下图: