python代码学习——操作:鼠标、下拉列表、键盘

鼠标操作

  • 有一种鼠标移开就消失不见的元素如何去定位?
  • 使用快捷键:鼠标放在要定位的元素上,然后使用ctrl+shift+c即可

代码模拟鼠标操作:ActionChains

  • 鼠标操作需要导入模块:from selenium.webdriver.common.action_chains import ActionChains
  • 使用以下操作,必须要调用perform,在所有的操作写完之后最后调用
    • 即通过ActionChains对象发起鼠标左键,右键,移动鼠标等操作,但最后需要使用perform()方法进行操作
  • 常见的操作有:
ele = diver.find_element_by_id("kw")
ActionChains(diver).click() #单击,以当前鼠标位置为准
ActionChains(diver).click_and_hold(ele)#在特定的元素上按住左键,别松开
ActionChains(diver).release() #抬起鼠标
ActionChains(diver).context_click()#鼠标右键点击
ActionChains(diver).double_click()#鼠标双击
ActionChains(diver).drag_and_drop(ele_1,ele_2)
#拖拽,需要传参,source和target,
# source代表拖拽前位置,target拖拽后的位置。
# source和target都是通过driver.find_element找到的元素
ActionChains(diver).move_to_element(ele)
#悬浮,需要传参,ele通过driver.find_element找到的元素
ActionChains(diver).key_down()
#不释放,只能用在控制键上,例如ctrl、alt、shift,不常使用
ActionChains(diver).key_down()#释放,不常使用
  • 鼠标执行点击的代码示例:
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time

#打开一个会话
diver = webdriver.Chrome()
#全屏
diver.maximize_window()

#访问百度链接
diver.get("https://www.baidu.com")
ele_sz = (By.XPATH,'//span[@id="s-usersetting-top"]')
#等待设置可见
WebDriverWait(diver,20).until(
    EC.visibility_of_element_located(
        ele_sz))
#点击设置
ActionChains(diver).click(diver.find_element(*ele_sz)).perform()
#等待高级设置可见
WebDriverWait(diver,20).until(
    EC.visibility_of_element_located(
        (By.XPATH,'//span[text()="高级搜索"]')))
#点击高级设置
diver.find_element_by_xpath(
    '//span[text()="高级搜索"]').click()
#关闭会话
time.sleep(10)
diver.quit()

鼠标点击和普通点击的区别

  • 虽然这两种操作的效果是一致的,但是其过程是有一定区别的
  • 普通的click,在点击的时候是有条件要求的,被点击的元素需要是能够被点击的状态
  • 鼠标click,不会管元素是否可以被点击,都会直接去点击
  • 使用鼠标点击的场景:如果发现有时候通过普通的click点击不了,那就需要使用鼠标点击

连续鼠标操作

  • 步骤:
    • 先通过driver.find_element确定拖拽元素前和鱼群后的位置
    • 然后通过鼠标左键按住对应的元素
    • 拖拽移动到目标区域,抬起鼠标
  • 多个鼠标操作的例子,以两个为例:
#ele_1:拖拽的元素
#ele_2:移动的目标位置
ActionChains(diver).click_and_hold(ele_1).move_to_element(ele_2).release().perform()`

下拉列表的操作

非select类型

  • 下拉列表对的操作中,最常见的是直接匹配文本内容
  • 非select类型的下拉框可以直接点击,也可以使用鼠标悬浮
    • 使用鼠标悬浮,需要导入鼠标操作的相关库,使用点击直接在找到的元素后面跟click即可
  • 鼠标悬浮的代码示例:
from selenium.webdriver.common.action_chains import ActionChains #鼠标库
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time

#打开一个会话
diver = webdriver.Chrome()
#全屏
diver.maximize_window()

#访问百度链接
diver.get("https://www.baidu.com")
ele_sz = (By.XPATH,'//span[@id="s-usersetting-top"]')
#等待设置可见
WebDriverWait(diver,20).until(
    EC.visibility_of_element_located(
        ele_sz))
#鼠标悬浮设置
ActionChains(diver).move_to_element(diver.find_element(*ele_sz)).perform()
#等待高级设置可见
WebDriverWait(diver,20).until(
    EC.visibility_of_element_located(
        (By.XPATH,'//span[text()="高级搜索"]')))
#点击高级设置
diver.find_element_by_xpath(
    '//span[text()="高级搜索"]').click()
#关闭会话
time.sleep(10)
diver.quit()
  • 直接点击的代码示例
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time

#打开一个会话
diver = webdriver.Chrome()
#全屏
diver.maximize_window()

#访问百度链接
diver.get("https://www.baidu.com")
#等待设置可见
WebDriverWait(diver,20).until(
    EC.visibility_of_element_located(
        (By.XPATH,'//span[@id="s-usersetting-top"]')))
#点击设置
diver.find_element_by_xpath('//span[@id="s-usersetting-top"]').click()
#等待高级设置可见
WebDriverWait(diver,20).until(
    EC.visibility_of_element_located(
        (By.XPATH,'//span[text()="高级搜索"]')))
#点击高级设置
diver.find_element_by_xpath(
    '//span[text()="高级搜索"]').click()
#关闭会话
time.sleep(10)
diver.quit()

select类型

  • 下拉列表有个很明显的方式:标签以select开头
  • 需要导入新的类:from selenium.webdriver.support.ui import Select
  • 选择下拉列表的选项有三种方式来选择
    • 1.文本内容
    • 2.value属性
    • 3.通过下标来选择
  • 这个类中存在不选中的方法,适用于多选
  • 步骤:
    • 1.导入select的库
    • 2.找到以select开头的标签
    • 3.将标签作为一个参数,传给Select类,实例化一个对象
    • 4.然后调用其中的方法
  • Select中常用的方法有:
    • select_by_value,通过选项的位置来选择选项,其中应传参数:HTML代码中的value属性
    • select_by_index,通过选项的索引来选择选项,其中应传参数:选项的索引,其从0开始
    • select_by_visible_text,通过选项的文本来选择选项,其中应传参数:选项的文本
    • 获取所有的下拉选项:实例化select.options,返回所有的选项,返回形式为列表
  • 代码示例:
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui 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
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

#设置链接
ele = driver.find_element_by_xpath('//*[@id="u1"]//a[@name="tj_settingicon"]')

#鼠标悬浮在设置链接上,显示下拉列表。
#perform()一定要调用。
ActionChains(driver).move_to_element(ele).click(ele).perform()
#ele.click()

#//a[text()="高级搜索"]
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//a[text()="高级搜索"]')))
driver.find_element_by_xpath('//a[text()="高级搜索"]').click()

#等待元素可见
WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,'//select[@name="ft"]')))
#Select下拉列表//select[@name="ft"]
ele = driver.find_element_by_xpath('//select[@name="ft"]')
ele.send_keys()
s = Select(ele)#实例化一个对象
#通过元素的value属性获取
s.select_by_value('rtf')
time.sleep(2)
#通过下标来选择
s.select_by_index(3)
time.sleep(2)
#通过文本来选择
s.select_by_visible_text('Adobe Acrobat PDF (.pdf)')
s.options#以列表的形式返回所有的选项

按键操作

  • 按键操作使用专门的按键库:from selenium.webdriver.common.keys import Keys
  • 可以直接按着ctrl,点击keys,查源码来学习,里面包含了所有键盘的值
  • 可以通过以下的代码来实现复制、粘贴、全选等操作
  • ele=diver.find_element_by_xpath(表达式)
  • ele.send_keys(Keys.CONTROL,'a')#全选
  • ele.send_keys(Keys.CONTROL,'c')#复制
  • ele.send_keys(Keys.CONTROL,'x')#剪切
  • ele.send_keys(Keys.CONTROL,'v')#粘贴
  • 非组合件的输入方式,都是放在send_keys中使用
  • 回车:Keys.ENTER
  • 删除:Keys.BACK_SPACE
  • 空格:Keys.SPACE
  • tab键: Keys.TAB
  • 回退:Keys.ESCAPE
  • 刷新:Keys.F5
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值