繁体   English   中英

如何使用 Selenium ChromeDriver 执行右键单击?

[英]How to perform right click using Selenium ChromeDriver?

我一直在寻找这个很多,但找不到 Python 的答案。

是否可以通过 selenium/chromedriver 模拟右键单击或打开上下文菜单?

我见过 Java 和其他一些语言的选项,但从未见过 Python。 我需要做什么来模拟对链接或图片的右键单击?

它在selenium.webdriver.common.action_chains 中称为context_click 请注意,Selenium 无法对浏览器级别的上下文菜单执行任何操作,因此我假设您的链接会弹出 HTML 上下文菜单。

from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
actionChains = ActionChains(driver)

actionChains.context_click(your_link).perform()

要在上下文菜单中移动,我们必须使用 pyautogui 和 selenium。 使用 pyautogui 的原因是我们需要控制鼠标来控制上下文菜单上的选项。 为了演示这一点,我将使用 python 代码在新选项卡中自动打开 Avengers Endgame 的谷歌图像。

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() 不会按预期工作)。

接下来的两行有助于在打开后导航到选项卡。 希望代码有帮助!

我遇到了同样的问题,我必须右键单击并单击“在新选项卡中打开链接”。 我在谷歌上搜索了很多答案,但没有找到针对 python 的特定解决方案。 早些时候,我正在使用显示右键菜单的“ActionChains”,但随后无法在 selenium 中访问该菜单列表,因为我发现一些线程说这具有操作系统级别的访问权限。

action = ActionChains(driver) action.context_click().send_keys(Keys.ARROW_DOWN).send_keys(Keys.ENTER).perform()

在这里, Keys.ARROW_DOWN 不起作用并在同一个选项卡中打开链接,理想情况下它应该在新选项卡中打开。 所以,我有两种方法可以做到这一点:

  1. link = driver.find_elements_by_xpath("//a[contains(@href, 'https:...')]")

    link.send_keys(Keys.CONTROL + Keys.ENTER)

  2. 通过javascript..

    driver.execute_script("window.open(arguments[0], '_blank');", link)

我认为您无法访问 selenium 中的右键单击菜单项,因为它超出了它的范围。

您可以使用 ActionChains 执行上下文单击,并通过 send_keys 使用箭头从上下文菜单中选择一个元素。

ActionChains(context.browser).move_to_element(element).context_click(element).perform()
ActionChains(context.browser).send_keys(Keys.ARROW_UP).perform()
ActionChains(context.browser).send_keys(Keys.ENTER).perform()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM