一、鼠标操作

from selenium.webdriver import ActionChains

ActionChains:鼠标操作类
①click:鼠标左击
②double_click:鼠标双击
③content_click:鼠标右击
④move_to_element:鼠标移动到某个节点
⑤click_and_hold:鼠标左键按下鼠标
⑥move_by_offse:鼠标相对当前位置进行移动
⑦grag_and_drop():在一个位置按下鼠标,到另一个位置释放

  • release:释放鼠标
  • perform:执行动作

例如:一个鼠标的完整动作

action = ActionChains(driver)
action.click(ele)
action.perform()

例如:验证码图形拖拽到指定位置

python selenium模拟鼠标悬停 显示鼠标图标 python selenium 鼠标移动_新窗口

action2 = ActionChains(driver)
# 按下鼠标
action2.click_and_hold(ele)
# 移动鼠标
action2.move_by_offset(xoffset=180, yoffset=0)
# 释放鼠标
action2.release()
# 执行动作
action2.perform()

例如:讲一个元素模块拖拽到另一个元素模块上

from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')

# iframe切换
iframe = driver.find_element_by_id('iframeResult')
driver.switch_to.frame(iframe)

ele1 = driver.find_element_by_id('ui-draggable')
ele2 = driver.find_element_by_id('ui-droppable')

actions = ActionChains(driver)
# 在元素ele1处按下鼠标
actions.click_and_hold(ele1)
# 移动到元素2上面
actions.move_to_element(ele2)
# 释放鼠标
actions.release()
# 执行动作
actions.perform()

二、选择下拉框

  • Select类
from selenium.webdriver.support.select import Select
  • 案例:百度高级搜索
  • 通过Select类选择元素的方法:
# ①根据索引选择
Select.select_by_index(index)
# ②根据文本选择
Select.select_by_visible_text("text")
# ③根据value值选择
Select.select_by_value(value)

例如:第一种:原生html标签select实现的选择框

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
time.sleep(2)
# 定位选择框
ele = driver.find_element_by_id('city')
# 创建一个选择对象
Select = Select(ele)
# 通过选项文本进行选择
Select.select_by_visible_text("广州")
# 通过选项的value属性进行选择
Select.select_by_value('sh')
# 通过选项的索引进行选择
Select.select_by_index(2)

第二种:前端框架组件实现的,没有现成的操作方法,只能定位选择框,点击显示选项,再点击对应的选项。通过定位元素点击操作即可。

三、键盘操作

  • Keys类
from selenium.webdriver.common.keys import Keys
  • 模拟按键有多种方法,能用win32api来实现,能用SendKeys来实现,也可以用selenium的WebElement对象的send_keys方法来实现。
  • 模拟ENTER键,可以用send_keys(Keys.ENTER)
  • CONTROL可以和其他键组合,实现复制、粘贴、剪切等功能
  • SPACE可用来选中check box或者radio button
  • 常用的键盘操作方法有:
    ① send_keys(Keys.CONTROL,‘c’) 复制
    ② send_keys(Keys.CONTROL,‘v’) 粘贴
    ③ send_keys(Keys.CONTROL,‘a’) 全选
    ④ send_keys(Keys.CONTROL,‘x’) 剪切
    ⑤ send_keys(Keys.F1’) 键盘F1到F12
# 在百度搜索框输入  python ,复制粘贴搜狗输入框进行搜索
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
driver.find_element_by_css_selector('#kw').send_keys('python')
sleep(2)
driver.find_element_by_css_selector('#kw').send_keys(Keys.CONTROL, 'a')  # 全选
driver.find_element_by_css_selector('#kw').send_keys(Keys.CONTROL, 'c')  # 复制
driver.find_element_by_css_selector('#kw').send_keys(Keys.CONTROL, 'x')  # 剪切
sleep(2)
driver.get('http://www.sogou.com')
driver.find_element_by_css_selector('.sec-input').send_keys(Keys.CONTROL, 'v')  # 粘贴
sleep(2)
driver.find_element_by_css_selector('#stb').click()
sleep(2)
driver.quit()

四、JS脚本

  • selenium没有封装修改网页元素属性的方法,要修改元素属性需要通过js
    例如:12306网站
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('https://www.12306.cn/index/')
date_ele = driver.find_element_by_id('train_date')
# 第一种:直接通过js修改value属性
js = "document.getElementById('train_date').value='2021-12-30'"
# 执行js代码
driver.execute_script(js)

# 第二种,通过修改日期的可读属性,再输入(推荐使用)
js = "document.getElementById('train_date').readOnly=false"
driver.execute_script(js)
time.sleep(2)
# 清空输入框
date_ele.clear()
# 输入内容
date_ele.send_keys('2021-12-30')

2通过传参形式:

# ①通过js修改日期的value属性
date_ele = driver.find_element_by_id('train_date')
js = 'arguments[0].value=arguments[1]'
driver.execute_script(js, date_ele, '2021-02-05')
# ②通过js修改元素的readOnly
date_ele = driver.find_element_by_id('train_date')
js = 'arguments[0].readOnly=false'
driver.execute_script(js, date_ele)

滑动元素可见的第一种方式:

# 定位选择省份
ele = driver.find_element_by_xpath('(//input[@placeholder="请选择省"])[1]])
# 滑动到元素处于可见状态,并且返回元素的坐标位置
loc = ele.location_once_scrolled_into_view
print(loc)

返回结果:
{‘x’:325, ‘y’:106}

滑动元素可见的第二种方式:js

js = 'arguments[0].scrollIntoView()'
driver.execute_script(js, ele)

JS滑动窗口可见的两种方式:

js = 'window.scrollBy(0, arguments[0])'
driver.execute_script(js, 500)

js = 'window.scrollTo(0, arguments[0])'
driver.execute_script(js, 500)

## 窗口管理:
通过js打开一个新窗口:

js = 'window.open()
driver.excute_script(js)

1、打开新窗口的封装,并切换的封装

# 1、打开新窗口的封装,并切换的封装
def new_open_window(driver, url):
    # 获取所有的窗口
    start_window = driver.window_handles
    # 打开新窗口
    js = 'window.open({})'.format(url)
    driver.execute_script(js)
    # 等待新窗口出现,进行切换
    WebDriverWait(driver, 5, 0.5).until(EC.new_window_is_opened(start_window))
    # 切换窗口
    driver.switch_to.window(driver.window_handles[-1])