标签: rselenium

RSelenium:向下滚动以加载Web内容

我在这里尝试了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)

在此输入图像描述

结果仍然相同.

javascript css selenium r rselenium

2
推荐指数
1
解决办法
1074
查看次数

RSelenium 无法连接到主机 rsDriver()

我正在尝试使用 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)

r rselenium

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

使用 Rselenium 和 PhantomJS 设置视口大小

我正在使用 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存在。

任何想法如何调整视口大小?

r rselenium

2
推荐指数
1
解决办法
317
查看次数

检查是否可以使用 RSelenium 向下滚动

我正在使用 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)

testing automated-tests rselenium

2
推荐指数
1
解决办法
1310
查看次数

使用RSelenium查找元素/元素

我正在尝试使用以下方法在此网站上找到一个单一元素 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)

r shiny rselenium

2
推荐指数
1
解决办法
1355
查看次数

来自RSelenium的executeScript给出了args错误

我尝试从这里重现示例代码

这是代码:

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有什么区别并给出了这个错误?

selenium r rselenium

2
推荐指数
1
解决办法
727
查看次数

RSelenium 使用 Docker 和 Firefox,在 Mac 上无法打开浏览器

我正在尝试将 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)

docker rselenium

2
推荐指数
1
解决办法
1338
查看次数

RSelenium:清除输入字段

我正在使用 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)

我怎样才能做到这一点?

selenium selenium-chromedriver rselenium

2
推荐指数
1
解决办法
844
查看次数

当我想定义 Firefox 配置文件时,为什么 RSelenium 总是给出错误

我正在使用 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)

browser firefox r rselenium

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

rvest:使用前面的标题抓取多个表格

我想抓住这个网址:https://prog.n​​fz.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)

r web-scraping rselenium rvest

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

使用 RSelenium 最大化浏览器窗口

有没有办法使用 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)

selenium r web-scraping rselenium rvest

0
推荐指数
1
解决办法
417
查看次数