RSelenium:单击不可见对象 - ElementNotVisibleException

时间:2015-09-05 05:34:32

标签: rselenium

此页面的主菜单(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很好。

3 个答案:

答案 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的点击点击它。注意:它可能会产生不利影响。