标签: rselenium

在RSelenium中指定下载文件夹

RSelenium用来导航到一个网页,其中包含一个下载文件的按钮.我使用RSelenium单击此按钮下载文件.但是,文件默认下载到我的文件夹'downloads'中,而我想将文件下载到我的工作目录中.我尝试指定一个chrome配置文件,如下所示,但这似乎没有做到这一点:

wd <- getwd()
cprof <- getChromeProfile(wd, "Profile 1")
remDr <- remoteDriver(browserName= "chrome", extraCapabilities = cprof) 
Run Code Online (Sandbox Code Playgroud)

该文件仍然下载在"downloads"文件夹中,而不是我的工作目录中.怎么解决这个问题?

google-chrome r rselenium

5
推荐指数
2
解决办法
2465
查看次数

使用RSelenium读取下拉菜单元素中的值

我正在使用RSelenium导航到网站并与元素进行交互.

问题:使用RSelenium,如何在下拉菜单中阅读选项列表,以便我可以识别可用的最新月份并使用它将下拉列表设置为正确的值?

某个站点上,为用户提供了一个下拉菜单,用于设置一年中的月份,从而定义用于依次显示或下载月度数据的日期范围的结束点.随着全年提供额外数月的数据,下拉列表中的选项会发生变化.

下拉菜单选项

截至7月底,下降将有1个选项,1月至6月.请注意,特定月份的数据会在该月末后的4-6周内发布,因此您不会在7月底之前获得6月份的数据,依此类推.我可以使用数字1到12设置值而没有任何问题,前提是下拉列表实际上包含相应的选项.

例如,如果7月的数据尚未发布(即,如果7月尚未出现在选项的下拉列表中),并且如果我尝试将下拉列表设置为"7",我将收到错误,我想避免.数据没有定期出现,因此我不能简单地假设月X的数据将出现在日期Y.

我相信Selenium本身有一个辅助类可用,但我不确定我是否可以通过RSelenium访问它.

示例代码如下 - 可能有点松懈,因为我还远未熟悉该软件包.

library(RSelenium)
RSelenium::checkForServer()
RSelenium::startServer()

remDr <- remoteDriver(remoteServerAddr = "localhost",
                      port = 4444,
                      browserName = "firefox"
                      )
remDr <- remoteDriver()
Sys.sleep(5)
remDr$open()
remDr$getStatus()

remDr$navigate("http://jamaserv.jama.or.jp/newdb/eng/index.html")

## Switch to left frame
frameElems <- remDr$findElements(using = "tag name", "frame")
sapply(frameElems, function(x){x$getElementAttribute("src")})
remDr$switchToFrame(frameElems[[1]])

webElem <- remDr$findElement(using = 'xpath', "//select[@name='txtTargetToMm']")

## Use javascript to set values
script <- paste0("arguments[0].value = '", 2, "'; arguments[0].onchange();") # set to February
remDr$executeScript(script, list(webElem))
webElem$getElementAttribute('value')    # check to …
Run Code Online (Sandbox Code Playgroud)

selenium r web-scraping rselenium

4
推荐指数
1
解决办法
1723
查看次数

使用 RSelenium 在 R 中抓取 Javascript

我试图抓取华盛顿邮报关于警察枪击事件的数据库。由于它不是 html 我不能使用rvest,所以我使用了RSeleniumphantomjs

library(RSelenium)

checkForServer()
startServer()

eCap <- list(phantomjs.binary.path = "C:/Program Files/Chrome Driver/phantomjs.exe")
remDr <- remoteDriver(browserName = "phantomjs", extraCapabilities = eCap)

remDr$open()

remDr$navigate("http://www.washingtonpost.com/graphics/national/police-shootings/")
Run Code Online (Sandbox Code Playgroud)

检查来源后,很明显我感兴趣的项目具有以下内容idclass

<div id="js-list-690" class="listWrapper cf">
Run Code Online (Sandbox Code Playgroud)

或在 Chrome 中:

Chrome 中相关项目来源的屏幕截图

我可以访问单个项目的文本:

remDr$findElement("css", "#js-list-691")$getElementText()
Run Code Online (Sandbox Code Playgroud)

返回

[[1]]
[1] "An unidentified person, a 47-year-old Hispanic man, was shocked with a stun gun and shot on July 30, 2015, in Whittier, Calif. Los Angeles County deputies were investigating a domestic disturbance when …
Run Code Online (Sandbox Code Playgroud)

selenium r web-scraping selenium-webdriver rselenium

4
推荐指数
1
解决办法
2228
查看次数

硒| 获取网页的文字

有没有办法从 RSelenium 中的 RemoteDriver 获取纯文本?有些人认为:remDr$getPlainText()相当于remDr$getPageSource()

解决方法:

我设法将 phantomJS 的纯文本保存到文件中,如下所示:

  require(RSelenium)
  pJS <- phantom()
  Sys.sleep(5) # give the binary a moment
  remDr = remoteDriver(browserName = 'phantomjs')
  remDr$open()
  remDr$phantomExecute('var page = this;
                         var fs = require(\"fs\");
                       page.onLoadFinished = function(status) {
                       var txtFile = fs.open(\"url.txt\", \"w\");
                       txtFile.write(page.plainText);
                       txtFile.close();
                       };')

  remDr$navigate(some_url)
Run Code Online (Sandbox Code Playgroud)

但后来我必须阅读后记中的文件......

我的解决方法类似于https://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-headless.html#id3b

r plaintext phantomjs rselenium

4
推荐指数
1
解决办法
2215
查看次数

处理 RSelenium 错误消息

当前正在抓取一个页面,该页面可以具有可变数量的元素,并且有时还使用不同的选择器格式化相同的数据元素。目前正在尝试使用一些 tryCatch 代码忽略 RSelenium 抛出的错误,但当指定的元素不在页面上时仍会停止:

  result <- tryCatch({
    webElem <- remDr$findElement('xpath', "//tr[(((count(preceding-sibling::*) + 1) = 9) and parent::*)]//span[(((count(preceding-sibling::*) + 1) = 1) and parent::*)]")
  }, warning = function(cond) {
    rank1_US <- NA
  }, 
  error = function(cond) {
    rank1_US <- NA
  }, finally = {
    rank1_US <- webElem$getElementText() %>% unlist(.) %>% ifelse(length(.) == 0, NA, .)
  })
Run Code Online (Sandbox Code Playgroud)

当在页面上找不到特定元素时会出现错误:

Selenium message:Unable to locate element: //tr[(((count(preceding-sibling::*) + 1) = 9) and parent::*)]//span[(((count(preceding-sibling::*) + 1) = 1) and parent::*)]
For documentation on this error, …
Run Code Online (Sandbox Code Playgroud)

r try-catch suppressmessage rselenium

4
推荐指数
1
解决办法
2167
查看次数

如何使用RSelenium上传文件?

我正在尝试了解如何使用 R/RSelenium 上传文件。信息:

  • 操作系统:Win 8.1、RSelenium_1.7.1,带有 docker 映像(linux、standalone-chrome 3.2.0)。

我尝试了这个问题的最高评论:

如何在 Java 中使用 Selenium WebDriver 上传文件

例子:

url <- "https://www.freepdfconvert.com/pdf-word"
path <- "C:/path_to_folder/filename.pdf"

remDr$navigate(url)

upload_btn <- remDr$findElement(using = "id", "clientUpload")
upload_btn$sendKeysToElement(path)
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误消息:

Selenium message:java.lang.String cannot be cast to java.util.List

Error:   Summary: UnknownError
     Detail: An unknown server-side error occurred while processing the command.
     class: java.lang.ClassCastException
     Further Details: run errorDetails method
Run Code Online (Sandbox Code Playgroud)

使用的文件夹映射到虚拟机。Autoit是不可能的,因为它只适用于 Windows。

还尝试了upload_btn$sendKeysToElement(list(path))不返回错误的方法,但它也不起作用。

任何帮助表示赞赏。


编辑

我认为这应该有效,但在查看屏幕截图时看到错误:

  • 将我的工作文件夹default作为共享文件夹挂载到虚拟机并命名win_share
  • default创建了一个文件夹sudo mkdir vm_share
  • 安装win_share …

selenium file-upload r rselenium

4
推荐指数
1
解决办法
1516
查看次数

硒问题

我正在尝试使用 Rselenium 抓取网站。但是我收到一个错误:

Error: checkForServer is now defunct. Users in future can find the function in 
file.path(find.package("RSelenium"), "examples/serverUtils"). The
recommended way to run a selenium server is via Docker. Alternatively
see the RSelenium::rsDriver function.
Run Code Online (Sandbox Code Playgroud)

我的 chrome 升级到 58 版,moxilla 升级到 45 版,rselenium 以前可以工作,但我不确定发生了什么,请帮助大家。

r rselenium

4
推荐指数
1
解决办法
6991
查看次数

R - Rselenium - setImplicitWaitTimeout 在 Selenium Server 3.5.3 中给出错误

当使用 Selenium Server 3.4.0 和 Gecko Driver v0.18 时,此 Rselenium 命令有效。

remDr$setImplicitWaitTimeout(milliseconds = 15000)      
Run Code Online (Sandbox Code Playgroud)

这是相关的代码块:

remDr <- remoteDriver()
remDr$open(silent = TRUE)   
remDr$setImplicitWaitTimeout(milliseconds = 15000)       
Run Code Online (Sandbox Code Playgroud)

但是,当使用 Gecko v0.18 或 v0.19 运行 Selenium Server 3.5.3 时,相同的代码会生成以下错误:

Selenium message:POST /session/91a1f43f-18b3-4e11-92a9-d738cd4049a4/timeouts/implicit_wait did not match a known command
Build info: version: '3.5.3', revision: 'a88d25fe6b', time: '2017-08-29T12:54:15.039Z'
System info: host: 'pc', ip: 'xxx.xxx.x.x', os.name: 'Windows 10', os.arch: 'x86', os.version: '10.0', java.version: '1.8.0_144'
Driver info: driver.version: unknown

Error:   Summary: UnknownCommand
 Detail: The requested resource could not be …
Run Code Online (Sandbox Code Playgroud)

selenium r selenium-webdriver rselenium

4
推荐指数
1
解决办法
2984
查看次数

R:Selenium 服务器信号端口 = 4567 已在使用中

似乎这是一个反复出现的问题,但我还没有找到解决我的问题的方法。

我正在运行以下内容:

link <- 'https://www.google.com/'

rD <- rsDriver(verbose = TRUE,
               port=4567L, 
               browserName = 'chrome', 
               chromever = '83.0.4103.39',
               check = TRUE)
remDr <- rD$client
remDr$navigate(link)
Run Code Online (Sandbox Code Playgroud)

当我运行第一个时,我收到错误:

wdman::selenium(port = port, verbose = verbose, version = version, 中的错误:Selenium 服务器信号端口 = 4567 已在使用中。

我的 chrome 驱动程序与我的 R 项目位于同一文件夹中。

我如何使这项工作?我确实遵循了文档,但似乎没有任何效果!!!

任何帮助将非常感激!

r rselenium

4
推荐指数
3
解决办法
2771
查看次数

使用 RSelenium 和 Docker 时 remDr$open() 挂起

我在 R 中有以下代码:

library(RSelenium)
shell('docker run -d -p 4446:4444 selenium/standalone-firefox')
remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4446L, browserName = "firefox")
remDr$open()
remDr$navigate("http://www.google.com/ncr")
remDr$getTitle()
Run Code Online (Sandbox Code Playgroud)

运行它时,它会在以下阶段冻结并且没有任何反应:

> remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4446L, browserName = "firefox")
> remDr$open()
[1] "Connecting to remote server"
Run Code Online (Sandbox Code Playgroud)

我怀疑这可能是因为我通常使用 Chrome 作为浏览器,但即使我按照以下方式将浏览器名称更改为 chrome,也会出现同样的问题:

remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4446L, browserName = "chrome")
Run Code Online (Sandbox Code Playgroud)

然后我还尝试了以下操作:

driver <- rsDriver(port = 4446L, browser = "chrome", chromever = NULL)
Run Code Online (Sandbox Code Playgroud)

这给出了以下结果:

checking Selenium Server versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD …
Run Code Online (Sandbox Code Playgroud)

selenium-webdriver docker rselenium

4
推荐指数
1
解决办法
479
查看次数