【发布时间】:2019-07-04 21:52:32
【问题描述】:
我正在尝试使用RSelenium 获得一些抓取技巧,但我遇到了一个困难。
我想为 page 中的 cmets 选择语言。但是当弹出单选按钮列表出现时,我设法单击其中的一些而不是其他的。我觉得我确实得到了正确的元素。这是我尝试过的:
library(RSelenium)
remDr <- remoteDriver(
remoteServerAddr = "localhost",
port = 4445L,
browserName = "firefox"
)
url <- "https://www.tripadvisor.com/Restaurant_Review-g187438-d12718258-Reviews-Prohobitox-Malaga_Costa_del_Sol_Province_of_Malaga_Andalucia.html"
remDr$navigate(url)
# click more language popup
webElems <- remDr$findElements(using = "css selector", ".taLnk") # taLnk is for dropdown like
webElemstext <- unlist(lapply(webElems, function(x) {x$getElementText()}))
webElems[[which(webElemstext == "More languages")]]$clickElement()
我尝试以这种方式获取单选按钮:
langues <- remDr$findElements(using = "class", "ui_radio")
langues_txt <- unlist(lapply(langues, function(x) {x$getElementText()}))
> langues_txt
[1] "All languages" "English (120)" "Spanish (66)" "Norwegian (25)" "All languages"
[6] "English (120)" "Spanish (66)" "Norwegian (25)" "Dutch (22)" "Swedish (13)"
[11] "French (12)" "German (10)" "Italian (7)" "Danish (3)" "Finnish (2)"
[16] "Portuguese (1)"
奇怪的是我可以单击最后一个单选按钮,但不能单击其他单选按钮,我不明白。如果我尝试点击芬兰语:
langues[[14]]$clickElement()
remDr$screenshot(display = TRUE)
什么都没发生。但是用葡萄牙语:
langues[[16]]$clickElement()
remDr$screenshot(display = TRUE)
在这里它起作用了。 我看不出这两种情况有什么区别,所以我找不到点击弹出窗口中任何单选按钮的解决方案。
有什么想法吗?
编辑
我试图点击所有这些。我可以单击“所有语言”、“英语”、“挪威语”和“葡萄牙语”。即使使用建议的解决方案,其他任何一个都不起作用:
BigDataScientist 解决方案
我确实加载了弹出菜单,但我之前删除了 cookie:
remDr$deleteAllCookies()
remDr$navigate(url)
# click more language
webElems <- remDr$findElements(using = "css selector", ".taLnk") # taLnk est le css pour etendre des menus.
webElemstext <- unlist(lapply(webElems, function(x) {x$getElementText()}))
webElems[[which(webElemstext == "More languages")]]$clickElement()
这是给出的解决方案
langues <- remDr$findElements(
using = "xpath",
value = "/html/body/div/div/div/div[@class = 'ui_radio item']"
)
langues_txt <- unlist(lapply(langues, function(x) {x$getElementText()}))
langues[[8]]$clickElement() # It should be german
remDr$screenshot(display = TRUE)
结果如下:
确实在这里我只获得了 12 种语言,但我仍然无法点击我想要的按钮。
supputuri 解决方案
这对我也不起作用:我都试过了:
langElement <- remDr$findElement(using = "css", ".more-options .ui_radio.item:nth-of-type(8) input")
langElement$clickElement()
remDr$screenshot(display = TRUE)
和
langElement <- remDr$findElement(using = "css", ".more-options div[data-tracker='German'] input")
# click on language radio button
langElement$clickElement()
remDr$screenshot(display = TRUE)
没有成功:
【问题讨论】:
标签: javascript r selenium web-scraping rselenium