自动化数据抓取技术(II): RSelenium
经常碰到的爬虫场景和处理方法
下面列出一些常碰到的爬虫场景和处理办法。
正确关闭Rselenium server
remDr$closeServer()
remDr$close()
rm(remDr)
rm(driver)
gc()
在浏览器窗口之间进行自由切换
具体见github issue社区互动 参考
myswitch <- function (remDr, windowId)
{
qpath <- sprintf("%s/session/%s/window", remDr$serverURL,
remDr$sessionInfo[["id"]])
remDr$queryRD(qpath, "POST", qdata = list(handle = windowId))
}
Sys.sleep(1)
windows_handles <- remDr$getWindowHandles()
Sys.sleep(1)
#remDr$switchToWindow(windows_handles[[2]])
myswitch(remDr = remDr, windowId = windows_handles[[2]])
鼠标相关操作
- 移动鼠标到指定位置 并点击
xpath_submit <- "//*[@id='loginform-1']/div[4]/input"
webelm <- remDr$findElement(using = "xpath", value = xpath_submit)
loc <- remDr$mouseMoveToLocation(webElement = webelm)
remDr$click(1)
选择不可见的勾选框
参考网络问答
对于一些网站,有时候存在肉眼不可见的网页元素。具体图示如下:
这时,我们需要使用remDr$executeScript()
函数来执行java
操作。
webelem <- remDr$findElement(using = "xpath", "//*[@id='ztcountryCode_273_check']")
remDr$executeScript("arguments[0].click()", args = list(webelem))
日历和下拉菜单操作
一个比较全的示例。
悬置鼠标唤出下级菜单
见示例。