我在这里尝试了RSelenium中的滚动页面中的代码, 但它不能正常工作,我正在处理的网站会在您向下滚动时加载更多内容.例如
webElem <- remDr$findElement("css", "body")
webElem$sendKeysToElement(list(key = "end"))
webElem$screenshot(display = TRUE)
Run Code Online (Sandbox Code Playgroud)
然后我再次重复这个过程.
webElem$sendKeysToElement(list(key = "end"))
webElem$screenshot(display = TRUE)
Run Code Online (Sandbox Code Playgroud)
结果仍然相同.
我正在尝试使用 RSelenium 抓取网站。但是,当我想连接到 Selenium 服务器时遇到了问题。
想象一下,我使用 rsDriver() 命令启动 selenium 服务器和浏览器:
rsDriver(browser = c('firefox'))
Run Code Online (Sandbox Code Playgroud)
这是生成的输出:
[1] "Connecting to remote server"
Fehler in checkError(res) :
Couldnt connect to host on http://localhost:4567/wd/hub.
Please ensure a Selenium server is running.
Zusätzlich: Warnmeldung:
In rsDriver(browser = c("firefox")) : Could not determine server status.
Run Code Online (Sandbox Code Playgroud)
或者我尝试了这个命令(在 stackoverflow 的另一个线程中找到它):
remDr <- remoteDriver(remoteServerAddr = "localhost"
, port = 4444L
, browserName = "htmlunit"
)
remDr$open()
Run Code Online (Sandbox Code Playgroud)
但它失败了:
[1] "Connecting to remote server"
Fehler in checkError(res) :
Couldnt connect to host …Run Code Online (Sandbox Code Playgroud) 我正在使用 RSelenium 和 PhantomJS 从站点中提取数据。
我正在尝试更改用户代理和视口大小。我已经设法调整了用户代理,但似乎无法调整视口大小。
library(RSelenium)
pJS <- phantom()
eCap <- list(phantomjs.page.settings.userAgent
= "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0",
phantomjs.page.viewportsize = "width:1280, height:1024")
remDr <- remoteDriver(browserName = "phantomjs", extraCapabilities = eCap)
remDr$open()
remDr$navigate("http://www.whoishostingthis.com/tools/user-agent/")
remDr$findElement("id", "user-agent")$getElementText()[1]
remDr$close()
Run Code Online (Sandbox Code Playgroud)
使用下面的代码,您可以看到浏览器窗口为 400 x 300。
我检查了 PhantomJS 文档并验证phantomjs.page.viewportsize存在。
任何想法如何调整视口大小?
我正在使用 RSelenium 自动向下滚动社交媒体网站并保存帖子。有时我到达网页底部,由于没有更多数据可用,因此无法加载更多帖子。我只想能够检查是否是这种情况,以便我可以停止尝试滚动。
如何判断是否可以在 RSelenium 中继续滚动?下面的代码说明了我正在尝试做的事情 - 我想我只需要“if”语句的帮助。
FYI有用于在Python这样的解决方案在这里(基本上检查,如果页面高度迭代是不同的),但我不能在河想出如何实现它(或任何其他解决方案)
# Open webpage
library(RSelenium)
rD = rsDriver(browser = "firefox")
remDr = rD[["client"]]
url = "https://stocktwits.com/symbol/NZDCHF"
remDr$navigate(url)
# Keep scrolling down page, loading new content each time.
ptm = proc.time()
repeat {
remDr$executeScript("window.scrollTo(0,document.body.scrollHeight);")
Sys.sleep(3) #delay by 3sec to give chance to load.
# Here's where i need help
if([INSERT CONDITION TO CHECK IF SCROLL DOWN IS POSSIBLE]) {
break
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下方法在此网站上找到一个单一元素 findElement
https://shiny.rstudio.com/gallery/datatables-options.html
例如“显示长度”。
稍后我想使用查找所有元素findElements。也就是说,“显示长度”,...,“函数回调”。共5个
我试图找到第一个元素(显示长度):
remDr$navigate("https://shiny.rstudio.com/gallery/datatables-options.html")
elems <- remDr$findElement("css selector", "#showcase-app-container > nav > div > ul > li.active > a")
# Unable to locate element
elems <- remDr$findElement("xpath", "//*[@id='showcase-app-container']/nav/div/ul/li[1]/a")
# Unable to to locate element
Run Code Online (Sandbox Code Playgroud)
我尝试查找以下几个元素:
elems <- remDr$findElements("class", "nav navbar-nav")
# Invalid or does not result in a WebElement
elems <- remDr$findElements("css selector", "#showcase-app-container > nav > div > ul")
# list of 0
elems <- remDr$findElements("xpath", "//*[@id='showcase-app-container']/nav/div/ul")
# list of 0
Run Code Online (Sandbox Code Playgroud) 我尝试从这里重现示例代码
这是代码:
library("RSelenium")
#start RSelenium server
rD <- rsDriver(verbose = FALSE)
remDr <- rD$client
remDr$open()
remDr$navigate("http://www.google.com/ncr")
script <- "return document.getElementById('hplogo').hidden;"
remDr$executeScript(script, args = list())
Run Code Online (Sandbox Code Playgroud)
并在最后一行收到此错误:
Selenium message:unknown error: 'args' must be a list
(Session info: chrome=60.0.3112.113)
(Driver info: chromedriver=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 6.3.9600 x86_64)
Error: Summary: UnknownError
Detail: An unknown server-side error occurred while processing the command.
Further Details: run errorDetails method
Run Code Online (Sandbox Code Playgroud)
我无法理解这个错误会发生什么,因为remDr$navigate工作和 remDr$executeScript.executeScript有什么区别并给出了这个错误?
我正在尝试将 RSelenium 与 Docker 一起使用,一切似乎都在工作,只是我看不到 firefox 浏览器。我认为我的代码中没有任何内容要求它是无头的,但情况必须如此。有没有办法让它像使用时一样可见RSelenium::startServer()?
我通过本文中的说明安装了 docker,https://www.raynergobran.com/2017/01/rselenium-mac-update/
我去了终端并输入:docker run -d -p 4445:4444 selenium/standalone-firefox没有问题。
我转到 R 并运行此代码:
library(RSelenium)
remDr <- remoteDriver(port=4445L, browserName = "firefox")
remDr$open()
remDr$getStatus()
remDr$navigate("https://www.google.com/")
remDr$getCurrentUrl()
Run Code Online (Sandbox Code Playgroud)
最后一个命令的输出符合预期:
[[1]]
[1] "https://www.google.com/"
Run Code Online (Sandbox Code Playgroud)
查看 之后的输出时remDr$open(),headless 设置为 false:
[1] "Connecting to remote server"
$`moz:profile`
[1] "/tmp/rust_mozprofile.EQnMfPLPKS4l"
$rotatable
[1] FALSE
$timeouts
$timeouts$implicit
[1] 0
$timeouts$pageLoad
[1] 300000
$timeouts$script
[1] 30000
$pageLoadStrategy
[1] "normal"
$`moz:headless`
[1] FALSE
$`moz:accessibilityChecks`
[1] FALSE
$acceptInsecureCerts
[1] FALSE
$browserVersion
[1] "58.0.2" …Run Code Online (Sandbox Code Playgroud) 我正在使用 RSelenium 自动化 chrome,需要在填充之前清除输入字段。我试过这个:
e <- rd$findElement("name", "keyword")$clear()
Run Code Online (Sandbox Code Playgroud)
和这个:
e <- rd$findElement("name", "keyword") %>% clear()
Run Code Online (Sandbox Code Playgroud)
和这个:
e6 <- rd$findElement("name", "sc.keyword").clear()
Run Code Online (Sandbox Code Playgroud)
和这个:
e$clear()
Run Code Online (Sandbox Code Playgroud)
和这个:
e %>% clear()
Run Code Online (Sandbox Code Playgroud)
但我得到的只是一条错误消息:
Error in clear(.) : could not find function "clear"
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我正在使用 RSelenium 并希望设置 Firefox 配置文件。所以我尝试重现这个问题的答案的例子。但是,无论我如何更改,我总是会收到以下错误。我究竟做错了什么?
我已经在 RSelenium 手册中读到,对于 Windows 系统,当想要制作 Firefox 配置文件时应该安装 RTools。我做到了,但没有任何改变。
错误如下:
Error in file(tmpfile, "rb") : cannot open the connection
In addition: Warning messages:
1: running command '"zip" -r9Xjq "C:\Users\mariu\AppData\Local\Temp\RtmpQfl3bl\file15c41fc2411d.zip" "C:\Users\mariu\AppData\Local\Temp\RtmpQfl3bl/firefoxprofile/prefs.js" ' had status 127
2: In file(tmpfile, "rb") :
cannot open file 'C:\Users\mariu\AppData\Local\Temp\RtmpQfl3bl\file15c41fc2411d.zip': No such file or directory
Run Code Online (Sandbox Code Playgroud) 我想抓住这个网址:https://prog.nfz.gov.pl/app-jgp/GrupaSzczegoly.aspx? id = 2AfRAM1JYDoYzktSMvdOhFiPm2Fnh67q
它列出了每个地区医疗程序的统计数据,html具有结构:标题和相应的表格,全国所有地区的16次.
在简化的html中:
<div class="tytul">01 - NameOfDistrict_01</div>
<table>
...
<tr>
<td class="lewa">No. of procedures</td>
<td class="prawa"><span id="ContentPlaceHolder1_lblbw">950</span>
</td>
...
</table>
<div class="tytul">02 - NameOfDistrict_02</div>
<table>
<tr>
...
<tr>
<td class="lewa">No. of procedures</td>
<td class="prawa"><span id="ContentPlaceHolder1_lblbw">350</span>
</td>
...
</td>
</table>
<div class="tytul">nn - NameOfDistrict_nn</div>
<table>
...
<tr>
<td class="lewa">No. of procedures</td>
<td class="prawa"><span id="ContentPlaceHolder1_lblbw">850</span>
</td>
...
</table>
Run Code Online (Sandbox Code Playgroud)
我不需要刮掉整个表格(如果可以的话我会很好)我只需要一个或两个值,所以我试着用Selector Gadget查看页面.我感兴趣的一个值是节点#ContentPlaceHolder1_lblbw中存在的过程数量,并且前面是标题即.tytul类.
mydata <- read_html(....) %>% html_nodes(name, "#ContentPlaceHolder1_lblbw") %>%
html_text()
Run Code Online (Sandbox Code Playgroud)
但是这个占位符会针对每个区域重复.然后我需要在表格上方的标题之后阅读第一个这样的占位符.并记录下面的每个标题和表格.
如何将这样的表刮到数据帧
District No. …Run Code Online (Sandbox Code Playgroud) 有没有办法使用 RSelenium 最大化浏览器窗口?
我当前的代码是:
scrape_url <- "https://[...]"
eCaps <- list(firefoxOptions = list(
args = list('--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"')
))
rD <- RSelenium::rsDriver(browser="firefox", port=4546L, verbose=F, chromever="87.0.4280.20",
extraCapabilities = eCaps)
remDr <- rD[["client"]]
remDr$navigate(scrape_url)
Run Code Online (Sandbox Code Playgroud)