java - 使用 Chromedriver 在 Chrome 中无法使用热键(快捷方式)

标签 java python keyboard-shortcuts selenium-chromedriver hotkeys

我正在使用 Chrome、付费扩展、Python 和 ChromeDriver 自动执行客户的一项繁琐任务。我必须加载特定页面,然后单击浏览器中的扩展图标,因此它将显示基于该页面的弹出窗口。我没有找到更好的方法来自动单击图标,因此我设置了一个热键来启动该扩展。
我使用的是 Chrome 54 和 ChromeDriver 2.25,现在我无法发送任何热键。
这适用于旧版本(无需设置扩展热键):

import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.chrome.service as service

ext_folder = os.environ["LOCALAPPDATA"] + "\\Google\\Chrome\\User Data\\Default\\Extensions\\blabla"

chrome_options = Options()
chrome_options.add_argument("load-extension=" + ext_folder)
chrome_path = "Path\\To\\chromedriver.exe"
service = service.Service(chrome_path)
service.start()
capabilities = {'chrome.binary': chrome_path}
browser = webdriver.Remote(service.service_url, desired_capabilities=chrome_options.to_capabilities())

browser.get('https://amazon.com')
browser.find_element(By.TAG_NAME, "body").send_keys(Keys.CONTROL + "m") # this would start the extension, but nothing happens
browser.quit()

我尝试过,无法通过正文标签发送任何热键。我只能向输入表单发送信件,热键也不起作用。
我什至尝试了 Java,结果如下:

Actions actions = new Actions(browser);
actions.keyDown(Keys.CONTROL).sendKeys("m").perform();  // doesn't work
actions.sendKeys(Keys.chord(Keys.ESCAPE)).perform();  // doesn't work
actions.sendKeys(Keys.chord(Keys.CONTROL, "m")).perform();  // doesn't work
WebElement body = browser.findElement(By.tagName("body"));
body.sendKeys(Keys.chord(Keys.ESCAPE));  // doesn't work
body.sendKeys(Keys.chord(Keys.CONTROL, "m"));  // doesn't work
Robot bot = new Robot();
bot.keyPress(KeyEvent.VK_CONTROL);
bot.keyPress(KeyEvent.VK_M);
bot.keyRelease(KeyEvent.VK_M);
bot.keyRelease(KeyEvent.VK_CONTROL);  // doesn't work

我什至附加了一段 JavaScript 代码来写入控制台,但我永远看不到“m”。机器人没有向控制台写入任何内容。
我开始觉得我完全独自面对这个问题。真的没有人遭受这种痛苦吗?请帮忙!

最佳答案

自 2012 年 3 月以来,这似乎一直是一个悬而未决的问题。它特定于 OSX 上的 Chrome。 https://bugs.chromium.org/p/chromedriver/issues/detail?id=30 建议的解决方法是使用备用快捷键 Performing a copy and paste with Selenium 2

关于java - 使用 Chromedriver 在 Chrome 中无法使用热键(快捷方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40843872/

相关文章:

python - 在 Pythonscript 中获取 Netcat 的输出

keyboard-shortcuts - 在vim中搜索反斜杠字符

c# - Visual Studio 尖括号 alt gr 不起作用

java - 存储每几个小时更新一次的小型、交替、公共(public)数据的最佳方法是什么?

java - Eclipse 启动时崩溃

java - com.google.gson.stream.MalformedJsonException : Use JsonReader. setLenient(true) 在将 Selenium 网格节点注册到集线器时接受格式错误的 JSON

intellij-idea - 水平列表到垂直列表,反之亦然 - 基于 IntelliJ IDEA 的 IDE

java - 为什么不允许重写方法中参数类型的差异(一个是原始方法,另一个是包装器)?

python - 将 Iris 约束与 OR 结合起来?

python - Websockets 消息仅在最后发送,而不是在使用 async/await 的实例中发送,在嵌套 for 循环中产生