文字太多,一眼找不到要找的内容? Ctrl+F 即可查找~
使用RSelenium包控制浏览器主要依靠remoteDriver系列函数:
remoteDriver( remoteServerAddr,
port,
browserName,
path,
version,
platform,
javascript,
nativeEvents,
serverURL,
sessionInfo)
其中,参数remoteServerAddr,表示远程服务器的IP地址,默认值是本机地址,是character型;
参数port,表示远程服务器连接端口,是numeric型;
参数browserName,表示浏览器名称,可以取chrome、firefox、htmlunit、internetexplorer或iphone,是character型;
参数path,表示远程服务器上命令的基本URL路径前缀,默认值是“/ wd / hub”;
参数version,表示浏览器版本,是character型;
参数platform,表示浏览器运行的系统,可以是WINDOWS、XP、VISTA、MAC、LINUX或UNIX,是character型;
参数javascript,表示会话是否支持在当前页面的上下文中执行用户提供的JavaScript,是logical型;
参数nativeEvents,表示会话是否支持本地事件,是logical型;
参数serverURL,表示JSON请求发送到的远程服务器的URL,是character型;
参数sessionInfo,表示会话相关信息,是list型。
通常情况下,只要设置browserName就可以对浏览器进行操作。
library(RSelenium)
remDr <- remoteDriver(browserName ="chrome")
remoteDriver函数的返回值是一系列函数,即remDr是一系列函数,先将主要的操作总结如下:
1、打开浏览器、关闭浏览器
# 打开浏览器
remDr$open()
# 关闭浏览器
remDr$quit() # 直接退出
remDr$close() # close用于关闭当前会话,也可以用作关闭浏览器
2、打开网页、关闭网页
# 打开网页
url <- 'http://www.baidu.com'
remDr$navigate(url)
# 关闭网页
remDr$closeWindow()
3、定位元素
定位到网页上某个元素需要使用函数findElement(using, value),其中using可以取"xpath", "css selector", "id", "name", "tag name", "class name", "link text"或"partial link text",value是其相应的值。
4、移动鼠标
移动鼠标使用函数mouseMoveToLocation(x = NA_integer_, y = NA_integer_, webElement = NULL), 其中x和y是坐标值,webElement是移向的网页元素。
5、单击
单击使用函数click(buttonId = 0),其中buttonId为0表示单击左键,为1表示单击滚动条,为2表示单击右键。
但是通常我们单击需要单击在网页的某个元素上,要定位到这个元素需要使用函数findElement(using, value),其中using可以取"xpath", "css selector", "id", "name", "tag name", "class name", "link text"或"partial link text",value是其相应的值。当然,单击某个元素也可以使用clickElement()函数。
# 以点击百度的“百度一下”按钮为例
# 打开网页
url <- 'http://www.baidu.com'
remDr$navigate(url)
# 定位
xpath <- '//*[@id="su"]'
btn <- remDr$findElement(using = 'xpath', value = xpath)
# 移动鼠标至该元素
remDr$mouseMoveToLocation(webElement = btn)
# 单击
remDr$click()
# 打开网页
url <- 'http://www.baidu.com'
remDr$navigate(url)
# 定位
xpath <- '//*[@id="su"]'
btn <- remDr$findElement(using = 'xpath', value = xpath)
# 单击
btn$clickElement()
6、双击
双击使用函数doubleclick(buttonId = 0),用法与单击一样。
7、在文本框输入文本
函数sendKeysToElement(sendKeys)用于在指定元素中输入文本,sendKeys必须是list型数据。在网页输入文本的步骤大致为,首先找到文本框元素的位置,然后输入文本。另外一个函数sendKeysToActiveElement(sendKeys)用于在当前活动元素中输入文本。
## 以百度文本框为例
# 打开网页
url <- 'http://www.baidu.com'
remDr$navigate(url)
# 定位文本框
xpath <- '//*[@id="kw"]'
btn <- remDr$findElement(using = 'xpath', value = xpath)
# 输入文本
text <- list('偷闲阁CSDN')
btn$sendKeysToElement(text)
# 输入文本并按回车
text <- list('偷闲阁CSDN', key = 'enter')
btn$sendKeysToElement(text)
8、窗口最大化
remDr$maxWindowSize()
9、截图
截图使用screenshot(display = FALSE, useViewer = TRUE, file = NULL)函数,其中file是截图后存放的路径,截的图像是PNG格式。
remDr$screenshot()
RSelenium包的准备工作请参考R语言爬取动态网页:使用RSelenium包和Rwebdriver包的前期准备。抓取示例请参考R语言:RSelenium包爬取动态网页。
RSelenium手册