因为我的 之前的问题仍未解决,所以我尝试使用firefox而不是chrome来指定下载目录。
所以我指定了下载目录:
fprof <- makeFirefoxProfile(list(browser.download.manager.showWhenStarting=FALSE,
browser.download.dir = "~/",
browser.helperApps.neverAsk.saveToDisk="text/csv",
browser.download.folderList = 2L))
remDr <- remoteDriver(extraCapabilities=fprof)
Run Code Online (Sandbox Code Playgroud)
完全一样这里所做的那样。
但是,这些文件仍然会下载到我的默认下载目录中,而不是 R 中的工作目录中。
有谁知道我可能做错了什么?
我试图使用这个网页http://volcano.si.edu/search_eruption.cfm来抓取数据.有两个下拉框要求过滤数据.我不需要过滤数据,因此我将其留空并继续单击" 搜索喷发 " 进入下一页.
然而,我注意到,结果表只包含少量列(仅5个),而不是它应该具有的总列数(总共24个).但是,如果单击"将结果下载到Excel "按钮并打开下载的文件,则所有24列都将在那里.这就是我需要的.
所以,看起来这已经从一次刮痧练习(使用httr和rvest)转变为更困难的事情.但是,我对如何使用R 实际"点击""将结果下载到Excel "按钮感到困惑.我的猜测是我将不得不使用RSelenium,但这里是我的代码试图使用带有POST的httr以防万一任何一个善良的人都可以找到一种更简单的方式.我也尝试过使用gdata,data.table,XML等无济于事,这可能只是用户错误的结果.
此外,知道无法右键单击下载按钮以显示URL可能会有所帮助.
url <- "http://volcano.si.edu/search_eruption_results.cfm"
searchcriteria <- list(
eruption_category = "",
country = ""
)
mydata <- POST(url, body = "searchcriteria")
Run Code Online (Sandbox Code Playgroud)
在我的浏览器中使用Inspector,我能够看到两个过滤器是"eruption_category"和"country",两者都是空白的,因为我不需要任何过滤数据.
最后,似乎上面的代码将使我进入只有5列的表的页面.但是,我仍然无法在下面的代码中使用rvest来刮掉这个表(使用SelectorGadget只刮一列).最后,这部分并不重要,因为正如我上面所说,我需要所有24列,而不仅仅是这些5列.但是,如果你发现我在下面做的任何错误,我将不胜感激.
Eruptions <- mydata %>%
read_html() %>%
html_nodes(".td8") %>%
html_text()
Eruptions
Run Code Online (Sandbox Code Playgroud)
感谢您提供任何帮助.
更新到 RStudio 版本 2022.12.0+353 (2022.12.0+353) 后,我无法使用 netstat 找到自由端口。
我以前从未遇到过这个问题。我该如何解决?
library(RSelenium)
library(netstat)
remote_driver <- rsDriver(browser = 'firefox',
verbose = F,
port = free_port())
Error message:
Could not open firefox browser.
Client error message:
Undefined error in httr call. httr output: Failed to connect to localhost port 14415 after 0 ms: Connection refused
Check server log for further details.
Warning message:
In rsDriver(browser = "firefox", verbose = F, netstat::free_port()) :
Could not determine server status.
Run Code Online (Sandbox Code Playgroud)
我努力了:
netstat::free_port()失败了。
我已经把浏览器换成chrome了,没成功。
Docker 从未在我的 MacBook …
有些问题类似于在SO (问题1),(问题2)中已经提出过的问题,但没有一个问题得到答案(最后一个问题由@jdharrison指示OP提出问题).这是我的问题:
我曾经有一个非常简单的脚本从网站获取一些信息到R:
startServer()
rd<-remoteDriver(remoteServerAddr="localhost",port=4444,browserName="firefox")
rd$open()
rd$navigate(url) #with a defined url
Run Code Online (Sandbox Code Playgroud)
当我现在尝试运行脚本时,rd$open()它会打开一个firefox窗口(保持空白约30秒),然后关闭并返回错误:
rd$open()
[1] "Connecting to remote server"
Error: Summary: UnknownError
Detail: An unknown server-side error occurred while processing the command.
class: org.openqa.selenium.firefox.NotConnectedException
Run Code Online (Sandbox Code Playgroud)
阅读SO和其他一些网站上的不同帖子,似乎问题是由firefox和RSelenium版本的不兼容引起的.
在GitHub的selenium论坛上,有一个帖子表明将硒从2.44更新到2.45解决了这个问题.但是,如果RSelenium似乎是最新的,我对如何更新硒一无所知:
sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=Spanish_Colombia.1252
[2] LC_CTYPE=Spanish_Colombia.1252
[3] LC_MONETARY=Spanish_Colombia.1252
[4] LC_NUMERIC=C
[5] LC_TIME=Spanish_Colombia.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] RSelenium_1.3.5 …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现异常处理,RSelenium并需要帮助.请注意,我已检查使用该robotstxt程序包抓取此页面的权限.
library(RSelenium)
library(XML)
library(janitor)
library(lubridate)
library(magrittr)
library(dplyr)
remDr <- remoteDriver(
remoteServerAddr = "192.168.99.100",
port = 4445L
)
remDr$open()
# Open TightVNC to follow along as RSelenium drives the browser
# navigate to the main page
remDr$navigate("https://docs.google.com/spreadsheets/d/1o1PlLIQS8v-XSuEz1eqZB80kcJk9xg5lsbueB7mTg1U/pub?output=html&widget=true#gid=690408156")
# look for table element
tableElem <- remDr$findElement(using = "id", "pageswitcher-content")
# switch to table
remDr$switchToFrame(tableElem)
# parse html for first table
doc <- htmlParse(remDr$getPageSource()[[1]])
table_tmp <- readHTMLTable(doc)
table_tmp <- table_tmp[[1]][-2, -1]
table_tmp <- table_tmp[-1, ]
colnames(table_tmp) <- c("team_name", "team_size", …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Firefox 学习 R 中的 RSelenium。我已经可以找到所需的元素并将鼠标移到它上面,但是当我尝试右键单击它时,它最终会被左键单击。
我尝试阅读文档(?remoteDriver并且?webElement确实很有帮助),但是webElement类只有clickElement方法,默认情况下左键单击并且没有参数,并且remoteDriver有click带参数的方法buttonId,其中 2 或“RIGHT”应该是鼠标右键单击当前已找到,但由于某种原因,它无法按我的预期工作,而是执行左键单击。
请注意,我知道 JavaScript、Selenium、使用 PhantomJS 等中存在关于相同问题的问题,我已经阅读过它们,但它们对我没有帮助。如果您觉得我错过了一些东西,请随时给我一个链接。
我的目标也不是仅仅在新选项卡中打开页面,这只是可以通过右键单击元素来执行的操作的示例。
我能想到的最小的可重现示例是:
library(RSelenium)
rd <- rsDriver(browser = 'firefox')
rdc <- rd$client
rdc$navigate('http://google.com/ncr')
elem <- rdc$findElement('partial link','About')
rdc$mouseMoveToLocation(webElement = elem)
# the following should open contextual menu, but enters the "About" page instead
rdc$click(buttonId = 'RIGHT')
# if the above line worked correctly, the following should open the "About" page in new tab
# …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我部署的 Shiny 应用程序上使用 RSelenium 进行充电测试。多个用户连接到该地址并同时执行随机任务。
我已经搜索过,doParallel但并发进程的数量受核心数量的限制 - 1。
我尝试了以下命令行同时在后台启动 N 个进程。给出一个数字作为参数来定义浏览器的端口。它一直工作到 3 个进程,但在某些进程失败并且并不总是相同的。
'start /b "P1" Rscript R/run_tests.R 1 &
start /b "P2" Rscript R/run_tests.R 2 &
start /b "P3" Rscript R/run_tests.R 3 &
start /b "P4" Rscript R/run_tests.R 4 &
start /b "P5" Rscript R/run_tests.R 5'
Run Code Online (Sandbox Code Playgroud)
run_tests 打开一个新的网络驱动程序并在网页上导航。
一个解决方案是让几个同事为 3 个进程运行此代码,但我想达到 20 个用户。
Windows 上的回答会更受欢迎,但 Linux 不是问题。您知道使用 RSelenium 执行此操作的正确方法吗?非常感谢任何线索。
我正在使用 Rselenium,今天遇到了一个奇怪的问题。它一直工作到上周五,但现在崩溃了。我已经更新了主包和 java,但它不起作用。这是我使用下一个代码时得到的结果:
library(wdman)
library(RSelenium)
library(xml2)
library(selectr)
library(httr)
library(jsonlite)
#start RSelenium
remDr <- rsDriver(
port = 4445L,
browser = "firefox"
)
#remDr$open()
remDr <- remoteDriver(port = 4445L,browser = "firefox")
Run Code Online (Sandbox Code Playgroud)
当为 rsDriver 运行第一个 remDr 时,我得到了这个:
checking Selenium Server versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
checking chromedriver versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
checking geckodriver versions:
BEGIN: PREDOWNLOAD
Error in (function (url, platform, history, appname, platformregex = platform, :
unused argument (fileregex = "\\.(gz|zip)$")
Run Code Online (Sandbox Code Playgroud)
对于第二个 remDr,它可以工作,但尝试使用 open 它会失败并显示下一条消息:
remDr$open()
[1] …Run Code Online (Sandbox Code Playgroud) 在 R selenium 中,可以像这样设置时间睡眠:
Sys.sleep(15)
Run Code Online (Sandbox Code Playgroud)
怎么可能设置随机时间?在Python中是这样的:
time.sleep(random.uniform(3.5,6.9))
Run Code Online (Sandbox Code Playgroud) 当前通过将不同的字符串传递给html_session()方法来更改 user_agent 。
有没有办法在抓取网站时更改计时器上的 IP 地址?