RSelenium:单击 Google 搜索中 for 循环中的后续链接
RSelenium: clicking on subsequent links in for loop from a Google search
我正在使用 RSelenium
进行一些简单的 Google 搜索。设置:
library(tidyverse)
library(RSelenium) # running docker to do this
library(rvest)
library(httr)
remDr <- remoteDriver(port = 4445L, browserName = "chrome")
remDr$open()
remDr$navigate("https://books.google.com/")
books <- remDr$findElement(using = "css", "[name = 'q']")
books$sendKeysToElement(list("NHL teams", key = "enter"))
bookElem <- remDr$findElements(using = "css", "h3.LC20lb")
这是简单的部分。现在,第一页上有 10 个 link,我想点击每个 link,退出,然后 clink 下一个 link. 最有效的方法是什么?我尝试了以下方法:
bookElem$clickElement()
Returns Error: attempt to apply non-function
- 我预计这会点击第一个 link,但效果不佳。 (如果我从 findElements()
中取出 s
- 上面的,而不是下面的 for
循环,这将起作用。
clack <- lapply(bookElem, function(y) {
y$clickElement()
y$goBack()
})
产生错误,有点像 like this question:
Error: Summary: StaleElementReference
Detail: An element command failed because the referenced element is no longer attached to the DOM.
Further Details: run errorDetails method
会不会是easier to uservest
,在RSelenium
之内?
我认为您可以考虑抓住 link 并在不返回主页的情况下循环浏览它们。
为此,您必须获取 link 个元素 ("a tag")。
bookElems <- remDr$findElements(using = "xpath",
"//h3[@class = 'LC20lb']//parent::a")
然后提取 "href" 属性并导航到该属性:
links <- sapply(bookElems, function(bookElem){
bookElem$getElementAttribute("href")
})
for(link in links){
remDr$navigate(link)
# DO SOMETHING
}
完整代码如下:
remDr$open()
remDr$navigate("https://books.google.com/")
books <- remDr$findElement(using = "css", "[name = 'q']")
books$sendKeysToElement(list("NHL teams", key = "enter"))
bookElems <- remDr$findElements(using = "xpath",
"//h3[@class = 'LC20lb']//parent::a")
links <- sapply(bookElems, function(bookElem){
bookElem$getElementAttribute("href")
})
for(link in links){
remDr$navigate(link)
# DO SOMETHING
}
我正在使用 RSelenium
进行一些简单的 Google 搜索。设置:
library(tidyverse)
library(RSelenium) # running docker to do this
library(rvest)
library(httr)
remDr <- remoteDriver(port = 4445L, browserName = "chrome")
remDr$open()
remDr$navigate("https://books.google.com/")
books <- remDr$findElement(using = "css", "[name = 'q']")
books$sendKeysToElement(list("NHL teams", key = "enter"))
bookElem <- remDr$findElements(using = "css", "h3.LC20lb")
这是简单的部分。现在,第一页上有 10 个 link,我想点击每个 link,退出,然后 clink 下一个 link. 最有效的方法是什么?我尝试了以下方法:
bookElem$clickElement()
Returns Error: attempt to apply non-function
- 我预计这会点击第一个 link,但效果不佳。 (如果我从 findElements()
中取出 s
- 上面的,而不是下面的 for
循环,这将起作用。
clack <- lapply(bookElem, function(y) {
y$clickElement()
y$goBack()
})
产生错误,有点像 like this question:
Error: Summary: StaleElementReference
Detail: An element command failed because the referenced element is no longer attached to the DOM.
Further Details: run errorDetails method
会不会是easier to uservest
,在RSelenium
之内?
我认为您可以考虑抓住 link 并在不返回主页的情况下循环浏览它们。
为此,您必须获取 link 个元素 ("a tag")。
bookElems <- remDr$findElements(using = "xpath",
"//h3[@class = 'LC20lb']//parent::a")
然后提取 "href" 属性并导航到该属性:
links <- sapply(bookElems, function(bookElem){
bookElem$getElementAttribute("href")
})
for(link in links){
remDr$navigate(link)
# DO SOMETHING
}
完整代码如下:
remDr$open()
remDr$navigate("https://books.google.com/")
books <- remDr$findElement(using = "css", "[name = 'q']")
books$sendKeysToElement(list("NHL teams", key = "enter"))
bookElems <- remDr$findElements(using = "xpath",
"//h3[@class = 'LC20lb']//parent::a")
links <- sapply(bookElems, function(bookElem){
bookElem$getElementAttribute("href")
})
for(link in links){
remDr$navigate(link)
# DO SOMETHING
}