如何在Rselenium中使用executeScript来模拟按下热键

问题描述 投票:0回答:1

RSelenium 是使用 R 的 Web 界面的一个很棒的软件包,但缺乏使用热键作为运行外部函数或以编程方式激活扩展的方式的功能。

我正在考虑的一种可能性是使用 javascript 命令来模拟按下一组按键,这将调用给定的浏览器功能或扩展。

我在Rselenium中测试了javascript的使用,效果不错,但我还没有找到模拟按键的javascript代码。我在网上找到了几个选项,但都不起作用。

有谁知道模拟按下“control”+“shif”+“r”所需的javascript代码。

    library(RSelenium)
    library(netstat)

    #Open browset
    rD <- rsDriver(port = free_port(), browser ="chrome",chromever = "latest", verbose = F)
    remDr <- rD$client

    url = "https://stocktwits.com/symbol/NZDCHF"
    remDr$navigate(url) 

    # test fucntionailitty using java script..scrolling down page. 
    script="window.scrollTo(0,document.body.scrollHeight);"
    remDr$executeScript(script)

    #Attempt 1
    script=('window.addEventListener("keydown", function(e) {if (e.key === "A" && e.ctrlKey) {console.log("Hotkey pressed!");}});'))

    remDr$executeScript(script)

    #Attempt 2
    script='window.addEventListener("keydown", function(e) {if (e.key === "A" && e.ctrlKey) {console.log("Hotkey pressed!");}});'
    remDr$executeScript(script)

    #Attempt 3
    script <- "var event = new KeyboardEvent('keydown', { ctrlKey: true,key: 'a'}); document.dispatchEvent(event);"
    remDr$executeScript(script)

    #Attempt 4
    script <- 'var event = new KeyboardEvent("keydown", { key: "A", code: "KeyA", ctrlKey: true });'
    remDr$executeScript(script)

  #Attemt 6
  script <- 'var event = new KeyboardEvent("keydown", { key: "a", ctrlKey: true, shiftKey: true });
       document.dispatchEvent(event);'
    remDr$executeScript(script)
javascript r selenium-webdriver rselenium
1个回答
0
投票

事实证明,出于安全原因,大多数浏览器不允许以编程方式调用扩展。对于需要网络抓取的有效科学努力(例如文献综述)来说,这是一个主要问题。

因此,我付钱给开发人员,解决方案是创建一个外部程序,允许自动模拟调用任何给定扩展的按下 hotkets。

我在 github 中创建了一个存储库,以解决任何面临类似问题的问题。

© www.soinside.com 2019 - 2024. All rights reserved.