我正在使用Windows 7机器.是否可以从RSelenium库运行remoteDriver()$ open()并让浏览器在后台运行(即不可见).
谢谢
我正在使用使用docker映像的Selenium:
require(RSelenium)
if (length(system("docker ps -l", intern = TRUE))<2)
try({system("docker run -d -p 4445:4444 selenium/standalone-firefox:2.53.0")})
Run Code Online (Sandbox Code Playgroud)
它有效,我可以连接到任何URL并导航。但是,当我单击按钮下载文件时,有时会将文件(部分保存为xxxxxxx.csv.part)保存到/tmp/mozilla_mozillaUser0,有时保存到...无处,或者找不到我找不到的其他位置...
有什么理由吗?
我也尝试使用打开驱动程序
makeFirefoxProfile(list(browser.download.dir = "D:/temp"))
Run Code Online (Sandbox Code Playgroud)
但它返回一个奇怪的错误
Error in file(tmpfile, "rb") : cannot open the connection
In addition: Warning messages:
1: running command '"zip" -r9Xjq "C:\Users\rocks\AppData\Local\Temp\RtmpoPhjUb\file31076202d4f.zip" "C:\Users\rocks\AppData\Local\Temp\RtmpoPhjUb/firefoxprofile/prefs.js" ' had status 127
2: In file(tmpfile, "rb") :
cannot open file 'C:\Users\rocks\AppData\Local\Temp\RtmpoPhjUb\file31076202d4f.zip': No such file or directory
Run Code Online (Sandbox Code Playgroud)
鉴于所有链接都在Windows中,但是我的硒在Docker容器或Ubuntu中运行,因此我可以理解为什么这种方法不起作用。
我的设置:R在Windows上运行,并且我有一个包含硒服务器的Ubuntu Docker镜像。
编辑: 原来我的问题是因为在主机上没有安装firefox(理论上是不需要的)。我通过使用(而不是调用makeFirefoxProfile)解决了该问题:
fprof = structure(list(firefox_profile = "UEsDBBQAAAAIANJiVEobimJN8QAAABkCAAAIAAAAcHJlZnMuanOFkT9PwzAQxXckvkOUCSQnlliZkDqygcSITHyJTW3fyXdNIj49btqBoLTd7t57v/OfOzDkT8rQP9RfGafStRanFNDY1vpcq6rWDiNohnDM6t3Z5frx+f7uGt5jsJBfPUuZ8nQrHU0yQxHY4fThIL2JyeLTUNjeBIYLvINAkF+IuE0wlor3LZsR3nHneX+8fjwE8VSG6bn58aQMUfCdEY9J/+tPiabDWA5hBrs2LxmRJ8xrqeNRCcyyFD6Wl2lKQ3UuvwkGVf3Nk+1VtQBOYjihFIxPqlrlYO4grNExlc/jZsOZt8XIGzJ2AtKwZDBx2ewvUEsBAj8AFAAAAAgA0mJUShuKYk3xAAAAGQIAAAgAJAAAAAAAAAAgAAAAAAAAAHByZWZzLmpzCgAgAAAAAAABABgAzaOo9TCL0gHdkgMtLYvSAd2SAy0ti9IBUEsFBgAAAAABAAEAWgAAABcBAAAAAA=="), .Names = "firefox_profile") …Run Code Online (Sandbox Code Playgroud) 我尝试使用 R 编程发送keysElement。这是我的代码
require(RSelenium)
remdir<-remoteDriver()
remdir$open()
remdir$navigate("http://www.flipkart.com")
sbox<-remdr$findElement(using = 'name',"q")
sbox$sendkeysToElement(list("laptops",key="enter"))
Run Code Online (Sandbox Code Playgroud)
但我收到这样的错误
Error in checkError(res) :
Undefined error in httr call. httr output: length(url) == 1 is not TRUE
Run Code Online (Sandbox Code Playgroud) 目前,我正在这个网站上抓取镜头图表信息。为了抓取信息,我需要为有多少个镜头创建一个 for 循环。我通过单击“球队统计数据”并查找投篮尝试次数来查找投篮次数。
我想for loop在不知道拍摄次数的情况下做出正确的选择。
我目前正在做的事情:
shotchart <- data.frame(shot=as.vector(0), class=as.vector(0), data_homeaway=as.vector(0),
data_period=as.vector(0), player_id=as.vector(0), data_text=as.vector(0),
location=as.vector(0), gamenumber= as.vector(0))
for (i in 1:54)
{
text <-paste0("//*[(@class='shots home-team')]//*[(@id)][",i,"]")
shotchart[nrow(shotchart)+1,1]<- unlist(re$findElement(using='xpath',text)$getElementAttribute('id'))
shotchart[nrow(shotchart),2]<- unlist(re$findElement(using='xpath', text)$getElementAttribute('class'))
shotchart[nrow(shotchart),3]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('data-homeaway'))
shotchart[nrow(shotchart),4]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('data-period'))
shotchart[nrow(shotchart),5]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('data-shooter'))
shotchart[nrow(shotchart),6]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('data-text'))
shotchart[nrow(shotchart),7]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('style'))
shotchart[nrow(shotchart),8]<-k-1
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。如果需要任何进一步的信息,请告诉我。
我一整天都在使用 RSelenium,但仍然在这里和那里遇到障碍。我当前的问题是使用WebElemReports$clickElement()单击链接并打开一个新窗口的代码。我试图在“about:config”中调整 Firefox 设置,这样它就不会打开一个新窗口。它在正常使用中不会打开一个窗口,但是使用 RSelenium 时,它仍然会打开一个新窗口。我也研究过这种方法,但无法遵循其工作原理:
我的下一个思考过程是将 switchToWindow() 函数与 getWindowHandles() 一起使用。我写的代码如下:
remDr$closeWindow()
windHand <- remDr$getWindowHandles()
remDr$switchToWindow(windHand)
Run Code Online (Sandbox Code Playgroud)
我的想法是我将关闭当前窗口,以便只有一个句柄可以引用并将该句柄传递给 switchToWindow 函数。我找不到 R 的很多 switchToWindow 文档。使用上面的代码时收到以下错误:
错误:摘要:未知错误详细信息:处理命令时发生未知的服务器端错误。类:org.openqa.selenium.WebDriverException
对此的任何帮助将不胜感激 - 我试图尽可能多地研究这个问题,所以这不会像我上一篇文章那样被标记为重复的问题。非常感谢。
如何通过“ using = 'id' ”导航动态下拉列表(例如,remDr$findElement(using='id', value="main_ddYear")?
我可以找到并点击使用findElement。单击后,我可以发送“向下箭头”键(击键)和“输入”,如果我知道我的目标选择向下有多少箭头。
页面源示例
<select name="main$ddYear" onchange="javascript:setTimeout('__doPostBack(\'main$ddYear\',\'\')', 0)" id="main_ddYear" class="groupTextBox">
<option selected="selected" value="2017">2017</option>
<option value="2016">2016</option>
<option value="2015">2015</option>
<option value="2014">2014</option>
<option value="2013">2013</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我想做一些类似于这篇文章中的解决方案,但使用 'id' 而不是 'xpath' 。我无法适应 xpath 解决方案。
Java 中的另一个解决方案使用了“Select”类,我在快速入门教程或文档中没有找到该类。
我将发布一个关于如何刮取选项/值下拉列表的单独问题。
如何使用 Rselenium 抓取下拉列表中的所有选项值?
页面源示例:
<select name="main$ddArea" onchange="javascript:setTimeout('__doPostBack(\'main$ddArea\',\'\')', 0)" id="main_ddArea" class="groupTextBox">
<option selected="selected" value="95182">Area 1</option>
<option value="95183">Area 2</option>
<option value="95184">Area 3</option>
<option value="95185">Area 4</option>
<option value="95186">Area 4</option>
</select>
Run Code Online (Sandbox Code Playgroud)
想要的结果是一个向量,每个值作为一个元素。例如, values = c("95182", "95183", "95184", "95185", "95186")
获取一串值也可能有效,因为它可以拆分为元素,例如,使用 strsplit。
带有“值”或“选项”的 getElementAttribute() 不起作用。例如,
dd.areas = remDr$findElement(using='id', value="main_ddArea")
dd.areas$getElementAttribute('option')
Run Code Online (Sandbox Code Playgroud)
或者
dd.areas$getElementAttribute('value')
Run Code Online (Sandbox Code Playgroud)
getElementText()查找文本的一个字符串,例如 "Area 1 /n Area 2 /n Area 3 /n...." 。但是以后不能使用该文本来导航下拉列表。换句话说,当使用 导航下拉列表时$findelement(),需要一个值来填充下拉列表;文本不起作用。
我正在使用 R 版本 3.3.2。使用 Rselenium 包,我试图从这个网站上抓取一些数据:http ://www.dziv.hr/en/e-services/on-line-database-search/patents/
我正在使用 Rselenium,我的代码如下所示:
selServ <- RSelenium::startServer(javaargs = c("-Dwebdriver.gecko.driver=\"C:/Users/Mislav/Documents/geckodriver.exe\""))
remDr <- remoteDriver(extraCapabilities = list(marionette = TRUE))
remDr$open()
Sys.sleep(2)
# Simulate browser session and fill out form
remDr$navigate("http://www.dziv.hr/hr/e-usluge/pretrazivanje-baza-podataka/patent/")
Run Code Online (Sandbox Code Playgroud)
这不起作用:
webel <- remDr$findElement(using = "xpath", "/input[@id = 'TB1']")
Run Code Online (Sandbox Code Playgroud)
然后我想使用switchToFrame()函数切换到 iframe ,但是 iframe 不包含 id。
然后我有 tr 使用索引:webel <- remDr$switchToFrame(1) 但这只是返回 NULL
另外,我认识到,iframe 有不同的域。
是否可以从该网站 svrap 数据?
我使用的是 Mac(操作系统 10.13.6),并且正在尝试学习如何使用 RSelenium。
我已经安装了 RSelenium,但在使用 rsDriver 命令时遇到问题:
rD <- rsDriver(browser="chrome",chromever="80.0.3987.106")
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Could not open chrome browser.
Client error message:
Undefined error in httr call. httr output: Failed to connect to localhost port 4567: Connection refused
Check server log for further details.
Warning message:
In rsDriver(browser = "chrome", chromever = "80.0.3987.106") :
Could not determine server status.
Run Code Online (Sandbox Code Playgroud)
我已经花了几天时间寻求帮助,但不清楚这里的适当解决方案。我已尝试使用该命令并chromever="latest"遵循此处找到的建议解决方法:stackoverflow.com/questions/55201226/。此外,我不知道在哪里可以找到错误中提到的“服务器日志”。
以前从未使用过这个包,或者做过这种类型的事情,我无法判断我是否只是没有在我的机器上正确设置东西(我需要安装和安装位置的 RSelenium 的非 R 要求),或者这是否是严格意义上的 Chrome 浏览器设置/版本问题,或者通常是 Mac 兼容性问题。
有没有人有一套更新的(即不涉及失效checkForServer()命令)步骤(对于绝对的 Selenium 初学者)来设置 RSelenium 并在 mac 上运行 …
我是网络抓取的新手,并且我已经成功地为多种不同类型的网站编写了函数,这些函数将我想要的信息收集到数据框架中。然而,话虽这么说,这些函数是在 Mac 上使用 RSelenium 开发的。当尝试在我的 Windows PC 上运行完全相同的功能时,它们失败了。
我认为该问题与 RSelenium 的启动方式有关。以下是我如何在每个不同的网络抓取功能中启动 RSelenium:
rs <- rsDriver(browser = "firefox", port = netstat::free_port())
remote <- rs$client
remote$navigate(url)
Run Code Online (Sandbox Code Playgroud)
在函数中执行此 R 代码后,将 Firefox 指定为 RSelenium 使用的浏览器时收到的错误如下:
Could not open firefox browser.
Client error message:
Undefined error in httr call. httr output: Failed to connect to localhost port 14415: Connection refused
Check server log for further details.
Error in checkError(res) :
Undefined error in httr call. httr output: length(url) == 1 is not TRUE
In addition: …Run Code Online (Sandbox Code Playgroud) r ×10
rselenium ×10
selenium ×4
web-scraping ×3
containers ×1
cross-domain ×1
docker ×1
for-loop ×1
iframe ×1
macos ×1
xpath ×1