此页面的主菜单(linio)有11个链接。只对9感兴趣(灰色背景和显示子菜单时)。
我想从9个选项中单击子菜单中的每个元素。期望的过程是:
1.-第一部分:" Celulares y Tablets"。
2.-转到:" Celulares和智能手机"。点击查看此页面。
3.-提取一些数据(选中,我已经能够这样做了)。
4.-转到" Celulares y Tablets"中的下一个子菜单。这是:" Accesorios Celular"。
5.-提取一些数据,然后转到下一个子菜单。完成本节中的所有子菜单后,我将进入下一个重要部分:" TV-Audio-y-Foto"。
等9个部分。
HTML结构
查看源代码,我已经到了这个地方:
1.-主标题:主标题位于' nav'标签:
<nav id="headerMainMenu>
2.-在&#39; nav&#39;内标签是一个&#39; ul&#39;和每个&#39;里面有和&#39; id&#39;对于9个部分中的每一部分:
<nav id="headerMainMenu>
<ul>
<il id = "category-item-celulares-y-tablets"><a href="..."></il>
<il id = "category-item-celulares-y-tablets"><a href="..."></il>
<il id = "category-item-celulares-y-tablets"><a href="..."></il>
</ul>
</nav>
3.-在il元素中,有div元素包含我们需要的链接:请注意<a>
与class =&#34; subnav__title&#34;。
<nav id="headerMainMenu>
<ul>
<il id = "category-item-celulares-y-tablets"><a href="...">
<div class="col-3">
<a href="..."class="subnav__title">TV y Video</a>
</il>
<il id = "category-item-celulares-y-tablets"><a href="..."></il>
<il id = "category-item-celulares-y-tablets"><a href="..."></il>
</ul>
</nav>
4.-使用RSelenium转到每个部分:
library(RSelenium)
library(rvest)
#start RSelenium
checkForServer()
startServer()
remDr <- remoteDriver()
remDr$open()
#navigate to your page
remDr$navigate("http://www.linio.com.pe/")
#Accesing the first submenu from "Category Celulares y Tablets
webElem <- remDr$findElement(using = 'css', value = "#category-item-celulares-y-tablets a.subnav__title")
webElem$sendKeysToElement(list(key = "enter"))
但这样做会显示此错误:
> webElem$sendKeysToElement(list(key = "enter"))
Error: Summary: StaleElementReference
Detail: An element command failed because the referenced element is no longer attached to the DOM.
class: org.openqa.selenium.StaleElementReferenceException
*我认为这question可能会有所帮助。但我不明白。
**我认为我的CSS很好。
答案 0 :(得分:1)
我在Python中使用了以下代码。我确信它可以转换成您的语言:
def click_hidden(self, css_selector):
'''
Click on a hidden element using javascript.
Selenium will error if the element doesn't excist and if javascript fails
REASON: Selenium doesn't allow clicks on hidden elements since the user won't either
So be sure the element would be visible in normal uses!
'''
element = self.find_css(css_selector)
self.execute_script("$(arguments[0]).click();", element)
return element
答案 1 :(得分:1)
您需要先点击父菜单。然后当子菜单可见时,单击子菜单。
parentMenuElement <- remDr$findElement(
using = 'css',
value = "#category-item-celulares-y-tablets")
parentMenuElement.click()
childMenuElement <- remDr$findElement(
using = 'css',
value = "#category-item-celulares-y-tablets a.subnav__title")
childMenuElement.click()
您可能还需要关闭偶尔出现的模式弹出窗口。
答案 2 :(得分:0)
如果相关元素的任何父元素具有属性&#39; display:invisible&#39;那么它的所有子元素对于selenium都是不可见的,所以你必须使用JavaScript破解这样的场景并使用Javascript的点击点击它。注意:它可能会产生不利影响。