一、介绍
RSeleium的目标是让R更容易的连接Selenium Server。 RSelenium绑定了R与Selenium Webdriver API。详细介绍见 官方原文
二、如何连接Selenium Server
- 下载并配置Selenium和WebDrivers
- 在Windows的command line中,定位到Selenium jar包所在文件夹,输入命令: java -jar selenium-server-standalone-x.xx.x.jar
- 在R console中, 使用
remoteDriver
函数初始化连接对象,然后用open
方法创建连接并打开浏览器。
library(RSelenium)
remDr <- remoteDriver(browserName = "firefox")
remDr$open() #如果报错,则很可能是WebDrivers的路径没有添加到环境变量中
三、Relenium函数与方法分类整理
Relenium中两个最重要的函数为remoteDriver()和webElement(),分别指向Selenium server(可以看做一个浏览器)和页面元素(即各种HTML元素等)。这两个函数创建的对象有很多方法可以用来爬取数据和操作浏览器。具体如下:
附注:完整函数与方法见 help(package="Rselenium")
(一)remoteDriver()函数
含义: | 指向Selenium server(可以看做一个浏览器) |
初始化: | 创建remoteDriver对象: |
remDr <- remoteDriver(browserName = "firefox") |
常用方法:
1. 打开、浏览与关闭: | |
open() | 与Selenium server建立连接并打开浏览器 |
navigate(url) | 打开url |
close() | 关闭当前session |
quit() | 删除session并关闭浏览器 |
2. 获取状态信息: | |
getStatus() | 获取Selenium server的状态 |
getCurrentUrl() | 获取当前页面的url |
getTitle() | 获取当前页面的标题 |
getWindowHandles() | 获取所有页面在Selenium中的window handle |
getPageSource() | 获取当前页面的源代码 |
3. 发送鼠标与键盘操作: | |
mouseMoveToLocation() | 将鼠标移动至某一位置,参数x, y代表移动到相对现在鼠标位置的(x,y)距离的位置,参数webElement代表移至某一页面元素的正中位置。一般使用webElement参数更方便。 |
click(buttontId = 0) | 单击鼠标(buttonId = 0代表左键,1代表中间建,2代表右键) |
doubleclick(buttonId = 0) | 双击鼠标 |
sendKeysToActiveElement(sendKeys) | 在被激活的页面元素(一般为刚刚被点击的元素)中输入一系列文本或键盘操作。输入内容,必须是list,如果是键盘操作,则前面要注明key=。例如:remDr$sendKeysToActiveElement(list("数据分析", key="enter"))。常用的key: |
4. 抓取页面元素(webElement) | |
findElement(using=…,value=…) | 抓取单个元素。例如:remDr$findElement(using = "css", value = "#kw")。using代表定位方法:"xpath", "css", "id", "name", "tag name", "class name", "link text", "partial link text"; value代表要搜索的值。 |
findElements(using=…,value=…) | 抓取多个元素。 |
5. 页面窗口操作 | |
refresh() | 刷新页面 |
screenshot() | 截屏,如果display=FALSE, file非NULL,则将截屏保存至file指定路径。 |
goBack() | 后退到上一页 |
goForward() | 前进,与后退对应 |
maxWindowSize() | 最大化当前窗口 |
closeWindow() | 关闭当前窗口(但session还是活跃状态) |
switchToWindow() | 切换窗口,参数可以输入window handle |
6. 插入JavaScript脚本来操作页面 | |
executeScript() | 插入同步js,参数sript即js脚本,args如果不需要特殊设定时 = 1:2即可)。例如:页面拉到最下面的js执行方式:remDr$executeScript("window.scrollTo(0,document.body.scrollHeight)", args = 1:2) |
executeAsyncScipt() | 插入异步js。 |
(二)webElement()函数
含义: | 指向页面元素(即各种HTML元素等) |
初始化: | 创建webElement对象: |
1. 直接创建 | |
webElem <- webELement(elementId = "…") | |
2. 抓取创建(更常用) | |
webElem <- remDr$findElement(using =…, value = …) | |
或者使用findElements查找并创建多个元素。 |
常用方法:
1. 获取元素信息 | |
describeElement() | 获取元素描述信息 |
getElemntText() | 获取内部文本--爬取数据的主要方法。 |
getElementAttribute(attrName) | 获取元素属性--可用于爬取元素连接等。 |
isElementDisplayed() | 元素是否被展示 |
isElementSelected() | 元素是否被选中 |
compareElement(otherElem) | 与另一元素对比,测试是否为同一元素。 |
2. 发送鼠标与键盘操作: | |
clearElement() | 针对文本输入框,清楚内容 |
clickElement() | 单击元素 |
highlightElement() | 高亮闪烁元素,主要用于确认定位的元素是否正确 |
sendKeysToElement() | 用法与remoteDriver函数中的sendKeysToActiveElement(sendKeys)方法相同 |
submitElement() | 针对<form>表单,提交表单 |
setElementAttribute() | *效用函数,设定元素属性。 |
3. 抓取子页面元素: | |
findChildElement() | 如果当前页面元素下还有子元素,则可以用此方法抓取单个子元素,用法与remDr$findElement()相同 |
findChildElements() | 抓取多个子元素。 |