webdriver处理鼠标右键菜单栏

selenium中ActionChains类提供了鼠标操作的常用方法,但对于鼠标右键的菜单栏,无论是send_keys(Keys.ARROW_DOWN)还是send_keys("K")(注:前者是模拟键盘上的方向键,后者是通过字母以快捷方式打开)都显得无能为力

一个比较典型的例子是百度图片另存为:想要在百度图片里选择一张"笔记本电脑"的图片并另存为,上面两种方法都是做不到的

多次百度之后,发现有一篇文章解决了这个问题——WebDriver如何处理右键菜单》,文中提到win32api和win32con可以做这个事情,第一步是先引入:

import win32api import win32con

引入之后,如果我们要对按键进行操作,就要模拟一次按下和释放的过程,比如现在要按下键盘上的字母V键,由于V在ASCII码表中的键码是86,可以写成以下形式

win32api.keybd_event(86,0,0,0) #字母V的键码是86 win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0) #按下后再释放

附上键位的ASCII码表

完整的访问百度图片,选择图片另存为的代码如下

from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys #需要引入keys包 import time import win32api import win32con #初始化chromedriver driver = webdriver.Chrome() #打开百度首页 driver.get("http://www.baidu.com") #浏览器窗口最大化 driver.maximize_window() #等待2s time.sleep(2) #定位到百度首页的更多产品 more_xpath = "//a[@name='tj_briicon']" more_element = driver.find_element_by_xpath(more_xpath) #鼠标悬浮 ActionChains(driver).move_to_element(more_element).perform() time.sleep(2) #点击图片 img_element = driver.find_element_by_xpath("//a[@name='tj_img']").click() time.sleep(2) #定位百度图片输入框,并输入内容"笔记本电脑" input_element = driver.find_element_by_id("kw") input_element.send_keys("笔记本电脑") #等待2s time.sleep(2) #回车 input_element.send_keys(Keys.ENTER) time.sleep(2) #定位到要右击的元素 pc_img_element = driver.find_element_by_xpath("//a[@name='pn1']") #右键,打开右键菜单栏 ActionChains(driver).context_click(pc_img_element).perform() time.sleep(2) #点击V图片另存为: #1. 按下键盘上的V键 win32api.keybd_event(86, 0, 0, 0) #2. 释放键盘上的V键 win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0)

 

 

 

1|0参考文章


http://blog.sina.com.cn/s/blog_5042ea610102w928.html

 


__EOF__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/9248952.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(1557)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示