Selenium无法点击所有单选按钮(只有部分单选按钮)

原创 287865  2019-07-09 20:03 

我试图通过 rselenium 获得一些拼抢技巧,我遇到了困难。

我想在中为评论选择语言。但是当弹出单选按钮列表出现时,我设法点击其中一些,而不是其他。我确实得到了正确的元素。这是我试过的:

   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() 
   

我试图这样得到单选按钮:[ 123]

   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)"
   

奇怪的是,我可以点击最后一个radiobutton,但不能点击其他的,我不明白。如果我试图点击芬兰语:

   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)
   

无效:

最佳答案:


问题的根源:

使用了类选择器,您还可以捕获平板电脑版本的潜在语言设置( ?)主页。请看下面的屏幕截图:

在第一行中你看到了班级

choice is-shown-at-tablet 。

一个解决方案: ]

您应该能够通过修改选择器(并排除平板电脑选项)来避免此问题。一种方法是使用完整的xpath(因为它与平板电脑选项的xpath不同)。

xpath将是:

/html/body/div/div/div/div[@class = 'ui_radio item'] [123 ]

测试:

从您的再生代码开始lity:

   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 = "xpath", 
  value = "/html/body/div/div/div/div[@class = 'ui_radio item']"
)

langues_txt <-  unlist(lapply(langues, function(x) {x$getelementtext()}))
> langues_txt
[1] "all languages"  "english (120)"  "spanish (67)"   "norwegian (25)" "dutch (22)"     "swedish (13)"  
[7] "french (12)"    "german (10)"    "italian (7)"    "danish (3)"     "finnish (2)"    "portuguese (1)"
  ] 当你看到你从16到12种语言选项(不包括双打)下来时,只获得你在截图中看到的那种。

你可以测试点击它们(例如德语):[

   langues[[8]]$clickelement()
   

注意:

可能你已经知道了,但为了完整起见:如果你想测试多种语言并点击一种语言,你必须在我的评论之后运行代码部分“从你的代码开始再现”:“123”再次打开语言弹出窗口。“

本文地址:https://www.hedasudi.com/2822.shtml
版权声明:本文为原创文章,版权归 287865 所有,欢迎分享本文,转载请保留出处!

发表评论


表情