前言:我们在操作浏览器的时候,都需要一些鼠标悬停才能显示的下拉框或者选择下拉框的内容。
鼠标操作类是 ActionChains
鼠标事件有:
1. 悬浮 - 用的最多最多 move_to_element
2. 右键 context_click
3. 点击 click
4. 双击 double_click
5. 拖拽 drag_and_drop
6. 滚动 — js
7. 按住左键不松 click_and_hold
8. 释放 release
执行的命令:
1. 重置 reset_actions
2. 执行操作 perform() # 一定要带
我们选百度首页的下拉框来做操作。如下:
只有鼠标悬浮才能现在下拉列表
代码实现:
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
#找到设置
ele = driver.find_element_by_xpath('//*[@id="u1"]//a[@name="tj_settingicon"]')
#鼠标悬停
ActionChains(driver).move_to_element(ele).perform()
#点击“高级搜索”
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//a[text()="高级搜索"]')))
driver.find_element_by_xpath('//a[text()="高级搜索"]').click()
那根据高级搜索 里的下拉框我们怎么处理? 使用 Select方法就可以搞定
具体代码如下:
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
#找到设置
ele = driver.find_element_by_xpath('//*[@id="u1"]//a[@name="tj_settingicon"]')
#鼠标悬停
ActionChains(driver).move_to_element(ele).perform()
#点击“高级搜索”
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//a[text()="高级搜索"]')))
driver.find_element_by_xpath('//a[text()="高级搜索"]').click()
# 1、找到select元素对象,实例化Select类。
WebDriverWait(driver,30).until(EC.visibility_of_element_located((By.XPATH,'//select[@name="ft"]')))
s = Select(driver.find_element_by_xpath('//select[@name="ft"]'))
#2、选择下拉框的值,下拉框的值可以通过value,index,text三种方法选择option对应的值,以下三种方法任选其一,或者都可以写进代码里,互不影响
time.sleep(2)
#2.1 通过value值来定位
s.select_by_value("ppt")
time.sleep(2)
#2.2通过下标来定位
s.select_by_index(1) # 从0开始
time.sleep(2)
#通过text文本来定位
s.select_by_visible_text("所有格式")
注:在鼠标悬停的时候,请不要触碰鼠标,以免发生错误