- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想缩小 RSelenium Remote ,但要找到解决方案出奇地困难。我知道
control
+ substract
,但这也不太奏效。我看了一下 How to press two keys simultaneously (i.e., control-s) in a webpage using RSelenium? ,正如 OP 指出的那样, control
+ a
有效但 control
+ s
,随后 control
+ substract
也不起作用。library(RSelenium)
driver <- rsDriver()
remDr <- driver[["client"]]
remDr$navigate("https://www.google.com/")
webElem <- remDr$findElement("css", "html")
webElem$sendKeysToElement(list(key = "control", "-")) ## Does not work
webElem$sendKeysToElement(list(key = "control", key = "subtract")) ## Does not work
浏览器是 Chrome。
最佳答案
我认为问题不在于将 key 发送到浏览器,因为如链接帖子中所述,可以将 control + a
发送到浏览器窗口以选择元素。似乎这些键没有被识别为浏览器应用程序的命令。
不过,还有其他方法可以解决这个问题。
正如@Muzzamil 所建议的,您可以通过使用 Chrome 更改文档主体的 css 来获得类似的效果,尽管这在 Firefox 中不起作用。
如果您想以一种在整个 session 期间持续存在的方式 native 更改浏览器缩放,我可以演示使用 Firefox 和 Chrome 的解决方案,因为在这两种情况下,您都可以导航到基于 html 的选项页面并与之交互以设置浏览器缩放级别。
以下是使用 Firefox 的方法:
library(RSelenium)
zoom_firefox <- function(client, percent)
{
store_page <- client$getCurrentUrl()[[1]]
client$navigate("about:preferences")
webElem <- client$findElement("css", "#defaultZoom")
webElem$clickElement()
webElem$sendKeysToElement(list(as.character(percent)))
webElem$sendKeysToElement(list(key = "return"))
client$navigate(store_page)
}
这允许:
driver <- rsDriver(browser = "firefox")
client <- driver$client
client$navigate("https://www.google.com")
client$screenshot(display = TRUE)
我们可以看到设置了默认缩放 (100%):
现在我们像这样缩小到 50%:
zoom_firefox(client, 50)
client$screenshot(display = TRUE)
zoom_firefox(client, 100)
client$screenshot(display = TRUE)
Chrome 更难,因为它的选项页面使用复杂的嵌套影子 DOM。由于我们无法获得 xpath 或 css 选择器来导航影子 dom,因此我们需要使用 javascript 提取元素的 webdriver id,然后将此 Id 强制到我们可以控制的另一个 web 元素上。
zoom_chrome <- function(client, percent)
{
store_page <- client$getCurrentUrl()[[1]]
client$navigate("chrome://settings/")
webElemId <- client$executeScript(paste0("return document.querySelector",
"(\"body > settings-ui\").",
"shadowRoot.querySelector(\"#main\")",
".shadowRoot.querySelector",
"(\"settings-basic-page\")",
".shadowRoot.querySelector",
"(\"#basicPage > ",
"settings-section:nth-child(8)",
"> settings-appearance-page\")",
".shadowRoot.querySelector",
"(\"#zoomLevel\");"),
args = list("dummy"))
webElem <- client$findElement("css", "html")
webElem@.xData$elementId <- as.character(webElemId)
webElem$clickElement()
webElem$sendKeysToElement(list("3"))
zooms <- c(25, 33, 50, 67, 75, 8:11 * 10, 125, 150, 175, 200, 250, 3:5 * 100)
desired_zoom <- which.min(abs(percent - zooms))
current_zoom <- which(zooms == 300)
n_keys <- desired_zoom - current_zoom
if(n_keys > 0)
for(i in seq(n_keys))
webElem$sendKeysToElement(list(key = "down_arrow"))
if(n_keys < 0)
for(i in seq(abs(n_keys)))
webElem$sendKeysToElement(list(key = "up_arrow"))
webElem$sendKeysToElement(list(as.character(percent)))
webElem$sendKeysToElement(list(key = "return"))
client$navigate(store_page)
}
但它的工作原理是一样的:
driver <- rsDriver(browser = "chrome", chromever = "80.0.3987.106")
client <- driver$client
client$navigate("https://www.google.com")
client$screenshot(display = TRUE)
zoom_chrome(client, 50)
client$screenshot(display = TRUE)
zoom_chrome(client, 100)
client$screenshot(display = TRUE)
这给出了与 firefox 完全相同的结果。
当然,您可以轻松编写一个简单的包装函数,根据当前浏览器选择调用哪个“缩放”函数。
我没有考虑在 Internet Explorer 或 phantomjs 中实现它,因为它们没有基于 html 的选项页面。
关于r - 在不更改页面大小/分辨率的情况下使用 RSelenium 缩小网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60139836/
我已将 r 更新到最新版本,并再次安装了 Rselenium。 我尝试使用 rsDriver,但端口 4567 有问题。与 this 相同 错误回溯: rd <-rsDriver(verbose =T
我找到了@jdharrison 关于如何在 Windows 上使用 RSelenium 启动 Tor 的绝妙答案: https://stackoverflow.com/a/39048970/78373
我想使用 RSelenium 和 Firefox 浏览器从网站下载文件。 我做的一切都是正确的(导航,选择正确的元素并写下我想要的); 现在我单击“下载”按钮,然后会打开一个 Firefox 弹出窗口
我正在使用 RSelenium 构建一个包含有关经理信息的数据框。我在选择下拉列表中的元素时遇到问题。 我的代码如下: > require(RSelenium) > remDr remDr$open(
我不确定是不是因为我的网速很慢,但我正在尝试抓取一个在您向下滚动页面时加载信息的网站。我正在执行一个转到页面末尾的脚本,并等待 Selenium/Chrome 服务器加载其他内容。服务器确实更新并加载
我一整天都在使用 RSelenium,但仍然到处遇到障碍。我当前的问题是使用代码 WebElemReports$clickElement() 单击链接并打开一个新窗口。我尝试调整“about:conf
如何使用 Rselenium 抓取下拉列表中的所有选项值? 页面源代码示例: Area 1 Area 2 Area 3 Area 4 Area 4 想要的结果是一个向量,每个值都是一个元素。例如,
我一整天都在使用 RSelenium,但仍然到处遇到障碍。我当前的问题是使用代码 WebElemReports$clickElement() 单击链接并打开一个新窗口。我尝试调整“about:conf
如何使用 Rselenium 抓取下拉列表中的所有选项值? 页面源代码示例: Area 1 Area 2 Area 3 Area 4 Area 4 想要的结果是一个向量,每个值都是一个元素。例如,
我将如何并行运行RSelenium。 以下是并行使用 rvest 的示例 library(RSelenium) library(rvest) library(magrittr) library(for
我正在尝试使用 RSelenium。这是我正在做的事情: library(RSelenium) driver<- rsDriver(browser=c("chrome")) remDr <- dri
我在 RSelenium 中使用以下代码来打开浏览器。在我关闭浏览器,甚至通过运行 remDr$close() 关闭处理程序后,该端口仍在使用中。我必须转到终端并手动终止该进程,以便同一端口可用。是否
我是 RSelenium 的新手,在使用“Introduction Vignette”中的以下示例时遇到了问题: remDr$navigate("http://www.r-project.org")
我使用 RSelenium 填写网络表单。要从下拉列表中选择一个选项,我使用以下命令: xpathoption <- paste0("//select[@id = '",samplepatient[p
我尝试使用以下命令安装和运行 R Selenium 包的简单示例: install.packages("RSelenium") library("RSelenium") startServer() c
我正在尝试使用 RSelenium 抓取网站。但是,当我想连接到 Selenium 服务器时遇到问题。 假设我使用 rsDriver() 命令启动 selenium 服务器和浏览器: rsDriver
在 Linux 上,RSelenium/Selenium似乎行为不正常。我手动启动服务器,它似乎启动正常。有时我可以从我的 R session 连接到它,有时我会收到错误消息。我还不能查明原因:相同的
SO (Question 1) 中已经提出了一些与此类似的问题。 , (Question 2) ,但没有一个得到答复(最后一个有@jdharrison 的相关评论,指示 OP 提出问题)。这是我的问题
我希望使用 RSelenium 将一些基因名称输入到一个在线存储库中,该存储库为所述基因创建功能注释热图。 但是,我正在努力研究如何将基因列表输入到文本框中以生成热图。 这是文本框和与之关联的 htm
我正在尝试使用RSelenium通过按钮捕获网页上可用的csv。相关的html是: Download 我可以通过其类选择i元素: remDr$findElement(using = 'css sel
我是一名优秀的程序员,十分优秀!