我一直在寻找这个,但找不到Python的答案。
是否可以模拟右键单击,或通过selenium / chromedriver打开上下文菜单?
我已经看过Java和其他一些语言的选项,但从未在Python中看到过。 我需要做些什么才能模拟右键单击链接或图片?
答案 0 :(得分:10)
在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()
答案 1 :(得分:2)
要在上下文菜单中移动,我们必须使用 pyautogui 和 selenium。使用 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() 将无法按预期工作)。
接下来的两行有助于在打开后导航到选项卡。希望代码有帮助!
答案 2 :(得分:0)
我遇到了同样的问题,我必须右键单击并单击“在新选项卡中打开链接”。我在Google上搜索了很多答案,但没有找到针对python的特定解决方案。 早些时候,我使用的是显示右击菜单的“ ActionChains”,但是由于我发现一些线程说它具有操作系统级别的访问权限,因此无法使用硒访问该菜单列表。
action = ActionChains(驱动程序) action.context_click()。send_keys(Keys.ARROW_DOWN).send_keys(Keys.ENTER).perform()
在这里,Keys.ARROW_DOWN不起作用,并在同一选项卡中打开链接,理想情况下,它应该在新选项卡中打开。 所以,有两种方法可以做到这一点:
链接= driver.find_elements_by_xpath(“ // a [包含(@href,'https:...')]”)
link.send_keys(Keys.CONTROL + Keys.ENTER)
通过javascript ..
driver.execute_script(“ window.open(arguments [0],'_blank');”,链接)
我认为您无法访问硒中的右键单击菜单项,因为它超出了范围。
答案 3 :(得分:-2)
您可以使用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()