我一直在搜索这个问题,但无法找到Python的答案。
是否可能通过selenium/chromedriver模拟右键单击或打开上下文菜单?
我已经看到了Java和其他一些语言的选项,但从未在Python中看到过。我需要做什么来模拟对链接或图片的右键单击?
我一直在搜索这个问题,但无法找到Python的答案。
是否可能通过selenium/chromedriver模拟右键单击或打开上下文菜单?
我已经看到了Java和其他一些语言的选项,但从未在Python中看到过。我需要做什么来模拟对链接或图片的右键单击?
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()
要遍历右键菜单,我们需要使用selenium和pyautogui两者结合。使用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)部分开始是基于selenium的。你的答案从pyautogui.moveTo(120, 130, duration=1)开始,它的作用就是将鼠标移动到上下文菜单的在新标签页中打开图像选项上(请注意屏幕坐标可能会因屏幕大小而异)。下一行代码点击该选项(使用action.click().perform()不会按预期工作)。
接下来的两行用于在打开新标签页后进行导航。希望这段代码有所帮助!
ActionChains
,右键菜单显示出来,但是后来发现在selenium中无法访问该菜单列表,因为我发现一些线程说这需要操作系统级别的访问。action = ActionChains(driver)
action.context_click(<obj_which_u_want_to_click>).send_keys(Keys.ARROW_DOWN).send_keys(Keys.ENTER).perform()
Keys.ARROW_DOWN
无法使用,同时希望在同一标签页中打开链接,理想情况下应该在新标签页中打开。
因此,我有两种方法实现这个需求:
第一种是通过send_keys
:
link = driver.find_elements_by_xpath("//a[contains(@href, 'https:...')]")
link.send_keys(Keys.CONTROL + Keys.ENTER)
其次,通过JavaScript实现:
driver.execute_script("window.open(arguments[0], '_blank');", link)
您可以使用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()
actionChains.context_click().perform()
这个操作应该可以。但是你无法对菜单进行任何操作,这已经超出了Selenium的范围。 - Yi Zengpynput
来按下up
、down
和enter
键来选择菜单选项,即使它们超出了 Selenium 的范围。 - Vladimir Fokowpyautogui
发送按键。 - Vladimir Fokow