我知道Selenium显然不支持导航上下文菜单。但我还在其他几个主题中看到过使用动作链进行解决方法。使用context_click()
后跟箭头键命令来浏览菜单。
我见过的所有示例都使用过Java,当我翻译成Python时,只会注册context_click()
命令。奇怪的是,我也不会得到错误。其他消息来源说Selenium生成的上下文菜单只是系统级别,因此,Selenium无法触及它们,只能创建。
所以我的问题是,有没有人能够通过Selenium成功导航并从上下文菜单中选择选项? Python示例是首选,但我会接受任何建议或答案。
编辑:
代码:
driver.get('https://www.google.com/')
actionChains = ActionChains(driver)
actionChains.context_click().send_keys(Keys.ARROW_UP).send_keys(Keys.ENTER).perform()
上下文
这只是我为测试这种情况而运行的测试脚本。在我的个人项目中,我需要浏览上下文菜单以访问chrome扩展。由于selenium只能在网页中进行互动,因此我无法点击浏览器显示的Chrome扩展程序按钮。所以这就是我一直在尝试的解决方法。
研究
https://testingrepository.com/how-to-right-click-using-selenium-webdriver/
- 此源告诉seleniums上下文菜单只是系统级别。在Java示例中,它们还使用.build()
命令。据我所知,这个命令不适用于Python。
Select an Option from the Right-Click Menu in Selenium Webdriver - Java
- 建议箭头键命令应该工作的线程。但是,所有示例都使用Java和.build()
命令
https://github.com/SeleniumHQ/selenium/blob/master/py/selenium/webdriver/common/action_chains.py
- 显示ActionChains()
是Pythons的.build()
命令版本。对某些人来说可能是常识。我事先不知道。
How to perform right click using Selenium ChromeDriver? - 与我非常相似的问题。当一个用户建议无法与菜单进行交互时,另一个用户建议使用actionChains解决方法。
答案 0 :(得分:3)
薄,
我有同样的问题,并且想知道没有人回答过这个问题......我不可能用硒来解决它,因为硒会在页面内导航。我的解决方案:
import win32com.client as comclt
wsh= comclt.Dispatch("WScript.Shell")
ActionChains(driver).move_to_element(element).context_click().perform()
wsh.SendKeys("{DOWN}") # send the keys you want
答案 1 :(得分:0)
好吧,我们可以使用 selenium 和 pyautogui 来解决这个问题。使用 pyautogui 的原因是我们需要控制鼠标来控制上下文菜单上的选项。为了演示这一点,我将使用 python 代码在新标签中自动打开复仇者联盟残局的谷歌图像。
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
import pyautogui
URL = 'https://www.google.com/'
PATH = r'C:\Program Files (x86)\chromedriver.exe'
driver = webdriver.Chrome(PATH)
action = ActionChains(driver)
driver.get(URL)
search = driver.find_element_by_name('q')
search.send_keys('Avengers Endgame')
search.send_keys(Keys.RETURN)
image_tab = driver.find_element_by_xpath('//a[text()="Images"]')
image_tab.click()
required_image = driver.find_element_by_xpath('//a[@class="wXeWr islib nfEiy mM5pbd"]')
action.context_click(required_image).perform()
pyautogui.moveTo(120, 130, duration=1)
pyautogui.leftClick()
time.sleep(1)
pyautogui.moveTo(300,40)
pyautogui.leftClick()
现在在上面的代码中,直到 pyautogui.moveTo(120, 130, duration=1) 的部分是基于硒的。您的答案从 pyautogui.moveTo(120, 130, duration=1) 开始,这只是将鼠标按钮移动到上下文菜单的在新标签页中打开图像选项(请注意屏幕坐标可能因您的屏幕尺寸而异)。下一行单击该选项(使用 action.click().perform() 将无法按预期工作)。
接下来的两行有助于在打开后导航到选项卡。希望代码有帮助!