我想使用RSelenium和Firefox浏览器从网站下载文件.我正确地做了一切(导航,选择正确的元素并写下我想要的东西); 现在我点击"下载"按钮,然后打开一个firefox弹出窗口,询问我是否要下载文件或"打开..."其他内容.
不幸的是,由于隐私限制,我不能写一个例子.
我的问题是:如何切换到弹出窗口/警报并在需要时单击"确定"?
我尝试了以下方法但没有成功:
remDrv$acceptAlert() -> tells me: NoAlertOpenError
remDrv$executeScript("driver.switchTo().alert().accept()")
Run Code Online (Sandbox Code Playgroud)
我也试过这个方法
remDrv$getWindowHandles()
Run Code Online (Sandbox Code Playgroud)
但即使弹出窗口是打开的,该命令只返回一个窗口(开头一个,而不是弹出窗口),因此我无法使用:
remDrv$switchToWindow()
Run Code Online (Sandbox Code Playgroud)
切换到弹出窗口.
有任何想法吗?谢谢
我正在运行基于RSelenium Basics CRAN页面的以下脚本:
library(RSelenium)
startServer(args = c("-port 4455"), log = FALSE, invisible = FALSE)
remDr <- remoteDriver(browserName = "chrome")
remDr$open()
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
Exception in thread "main" java.net.BindException: Selenium is already running on port 4444. Or some other service is.
at org.openqa.selenium.server.SeleniumServer.start(SeleniumServer.java:492)
at org.openqa.selenium.server.SeleniumServer.boot(SeleniumServer.java:305)
at org.openqa.selenium.server.SeleniumServer.main(SeleniumServer.java:245)
at org.openqa.grid.selenium.GridLauncher.main(GridLauncher.java:64)
Run Code Online (Sandbox Code Playgroud)
根据GitHub上这个对话的评论,我修改了我的startServer()命令:
startServer(args = c("-port 4455"), log = FALSE, invisible = FALSE)
Run Code Online (Sandbox Code Playgroud)
然后我在控制台中收到以下错误:
Error: Summary: UnknownError
Detail: An unknown server-side error occurred while processing the command.
class: java.lang.IllegalStateException
Run Code Online (Sandbox Code Playgroud)
弹出的Java提示中出现此错误: …
使用RSelenium我可以使用以下公式通过Firefox浏览器从网页下载文件:
csv = remDr$findElement(using = 'css selector', "a[ng-click*=download]")
remDr$executeScript("arguments[0].click();", list(csv))
Run Code Online (Sandbox Code Playgroud)
当我尝试使用phantomjs浏览器复制该过程时,没有任何反应.猜猜也许没有设置下载目录,我试过:
remDr$extraCapabilities = makeFirefoxProfile(list(browser.download.dir = "/download/path"))
Run Code Online (Sandbox Code Playgroud)
仍然没有任何反应 感谢一个想法,让这一切发挥作用.
编辑.
我应该在安装过程中添加以下报告,这可能相关或不相关,但它似乎不会停止页面连接或元素选择:
> pJS = phantom()
[ERROR - 2016-03-17T17:54:08.914Z] GhostDriver - main.fail - {"line":85,"sourceURL":"phantomjs://code/main.js","stack":"global code@phantomjs://code/main.js:85:56"}
phantomjs://platform/console++.js:263 in error
Run Code Online (Sandbox Code Playgroud) 我在网上搜索这个网页:
http://www.falabella.com.pe/falabella-pe/category/cat40536/Climatizacion?navAction=push
Run Code Online (Sandbox Code Playgroud)
我只需要产品中的信息:"品牌","产品名称","价格".

我可以得到它,但我也从其他用户的类似产品的横幅中获取信息.我不需要它.
但是当我转到页面的源代码时,我看不到那些产品.我认为它是通过javascript或其他东西拉出来的:

问题1: 如何在进行网络抓取时阻止此信息? 这增加了我不需要的产品.但是在源代码中看不到这一部分.
问题2:当提取价格"precio1"时,我将其作为第一个元素:"\n\t\t\t\tSubtotal InternetS/. 0"我在代码源中也看不到它.怎么不刮呢?
library(RSelenium)
library(rvest)
#start RSelenium
checkForServer()
startServer()
remDr <- remoteDriver()
remDr$open()
#navigate to your page
remDr$navigate("http://www.falabella.com.pe/falabella-pe/category/cat40536/Climatizacion?navAction=push")
page_source<-remDr$getPageSource()
Climatizacion_marcas1 <- html(page_source[[1]])%>%
html_nodes(".marca") %>%
html_nodes("a") %>%
html_attr("title")
Climatizacion_producto1 <- html(page_source[[1]])%>%
html_nodes(".detalle") %>%
html_nodes("a") %>%
html_attr("title")
Climatizacion_precio1 <- html(page_source[[1]])%>%
html_nodes(".precio1") %>%
html_text()
Run Code Online (Sandbox Code Playgroud) 希望使用我的Linux机器使用RSelenium和Tor来返回Tor IP(将Firefox作为Tor浏览器).这对于Python是可行的,但在R中遇到问题.任何人都可以使用它吗?也许您可以在Windows/Linux中共享您的解决方案.
# library(devtools)
# devtools::install_github("ropensci/RSelenium")
library(RSelenium)
RSelenium::checkForServer()
RSelenium::startServer()
binaryExtension <- paste0(Sys.getenv('HOME'),"/Desktop/tor-browser_en-US/Browser/firefox")
remDr <- remoteDriver(dir = binaryExtention)
remDr$open()
remDr$navigate("http://myexternalip.com/raw")
remDr$quit()
Run Code Online (Sandbox Code Playgroud)
Error in callSuper(...) : object 'binaryExtention' not found正在返回错误.
对于社区参考,此Selenium代码在Windows中使用Python3:
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from os.path import expanduser # Finds user's user name on Windows
# Substring inserted to overcome r requirement in FirefoxBinary
binary = FirefoxBinary(r"%s\\Desktop\\Tor Browser\\Browser\\firefox.exe" % (expanduser("~")))
profile = FirefoxProfile(r"%s\\Desktop\\Tor Browser\\Browser\\TorBrowser\\Data\\Browser\\profile.default" % (expanduser("~")))
driver = …Run Code Online (Sandbox Code Playgroud) "那时候一切都好多了"......
因为firefox 49(?)你不能使用rselenium包不再直截了当.我已经搜索了整个互联网,找到了一个简单的如何手动设置rselenium但没有发现任何相关和最新的.
有人可以提供我和其他所有其他人没有线索的简单操作手册吗?喜欢:
所以我可以运行如下代码
require(RSelenium)
remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4444L,
browserName = "firefox")
remDr$open()
Run Code Online (Sandbox Code Playgroud) 我已经为以下几行代码苦苦挣扎了几个小时,但我似乎仍然没有接近解决方案。我的代码如下:
#create a list of all the question elements on the page
questions <- remDr$findElements(using = 'xpath', "//div[@class='question-text']")
#get the first question element in the list
question <- questions[1]
#get the text of the question element
question$getElementText()
Run Code Online (Sandbox Code Playgroud)
当我使用 RStudio 进行调试时,似乎“问题”列表中的所有“问题”元素都正确填充了;'question' 项被正确填充了列表中的第一个 'question' 元素;但是下一行代码的许多变体,旨在获取问题元素中的文本,似乎都失败了,给出了以下错误:
Error in evalq({ : attempt to apply non-function
Run Code Online (Sandbox Code Playgroud)
错误可能来自代码的不同部分,但可能性很小,因为注释掉该行似乎可以让其他一切正常工作。
我将非常感谢你们和女孩们可能提供的任何帮助。我正在使用 RSelenium 在 R 中编程 - 正如您可能会说的,我是 R 的新手,尽管我在其他环境中使用 Selenium 的经验非常有限。
预先感谢您的想法!
我花了一天时间在互联网上搜索如何做到这一点的例子,但是我仍然在旋转,并且可以使用一点方向.我是html的新手,具有基本的R编码经验,并且对任何其他编码语言的经验很少.
我有一个500多个(可能更多)气象站的列表,我想从这个网站下载FW13格式的数据(https://fam.nwcg.gov/fam-web/kcfast/html/wxhmenu.htm).在浏览器中,您填写表单,提交表单,它将开始将FW13文件下载到我的默认下载文件夹.
我的目标是使用R填写html表单,提交它,然后接受将结果文件下载到定义的位置.表单本身由文本和单选按钮组成.以下是单个查询的示例:
站ID:020207
开课日期:2000-01-01
截止日期:2017-12-31
观察类型:每小时
计划选项:立即运行
我沿着RCurl和rvest包的兔子洞走下去,甚至开始试用rSelenium.我见过的大多数例子都是直接从网站上抓取信息,但我只想接受下载生成的文件.
如果我只能提交单个请求并下载单个文件,我相信我可以弄清楚如何使用站点ID列表来循环,以实现我所需要的.
我为没有任何示例代码而道歉.我所有的试验都是在黑暗中盲目拍摄,我甚至不确定我是否正在使用正确的包装来完成这项任务.任何帮助或方向非常感谢!
我想缩小 RSelenium 遥控器,但这很难找到解决方案。我知道
control+ substract,但这也不太有效。我已经了解了如何使用 RSelenium 在网页中同时按下两个键(即 control-s)?,正如OP所指出的,control+起作用,但+a不起作用,随后+也不起作用。controlscontrolsubstractlibrary(RSelenium)
driver <- rsDriver()
remDr <- driver[["client"]]
remDr$navigate("https://www.google.com/")
webElem <- remDr$findElement("css", "html")
webElem$sendKeysToElement(list(key = "control", "-")) ## Does not work
webElem$sendKeysToElement(list(key = "control", key = "subtract")) ## Does not work
Run Code Online (Sandbox Code Playgroud)
浏览器是Chrome。
我正在使用 进行数据提取任务R。数据是在Power BI仪表板中分配的,所以获取起来非常麻烦。我在这里找到了解决方案:
但我不确定如何在页面中导航以获取组件并提取表格。我的代码如下:
library(wdman)
library(RSelenium)
library(xml2)
library(selectr)
library(tidyverse)
library(rvest)
# using wdman to start a selenium server
remDr <- rsDriver(
port = 4445L,
browser = "firefox"
)
#remDr$open()
remDr <- remoteDriver(port = 4445L,browser = "firefox")
# open a new Tab on Chrome
remDr$open()
# navigate to the site you wish to analyze
report_url <- "https://app.powerbi.com/view?r=eyJrIjoiOGI5Yzg2MGYtZmNkNy00ZjA5LTlhYTYtZTJjNjg2NTY2YTlmIiwidCI6ImI1NDE0YTdiLTcwYTYtNGUyYi05Yzc0LTM1Yjk0MDkyMjk3MCJ9"
remDr$navigate(report_url)
# fetch the data
data_table <- read_html(remDr$getPageSource()[[1]]) %>%
querySelector("div.pivotTable")
Run Code Online (Sandbox Code Playgroud)
虽然硒进程工作,但我不知道如何获取我的表:
蓝色箭头显示了我想要的表格,然后我需要移动到其他页面来提取剩余的表格。但我想如果第一页能做到的话,其他页面也会一样。
非常感谢!