2015-09-05 3 views
7

Das Hauptmenü auf dieser Seite (linio) hat 11 Links. Nur interessiert an 9 (diejenigen mit grauem Hintergrund und zeigen Untermenüs, wenn sie schwebten).RSelenium: Klicken Sie auf unsichtbares Objekt - ElementNotVisibleException

Ich möchte jedes einzelne Element im Untermenü aus den 9 Optionen klicken. Der gewünschte Prozess ist:

1.-Erster Abschnitt: "Celulares y Tablets".
2.-Gehen Sie zu: "Celulares y Smartphones". Klicke und sieh dir diese Seite an.
3.-Extrahieren Sie einige Daten (überprüft, ich konnte dies tun).

4.-Gehen Sie zum nächsten Untermenü in "Celulares y Tablets". Was ist: "Accesorios Celular".

5.-Extrahieren Sie einige Daten und gehen Sie zum nächsten Untermenü. Nachdem ich mit allen Untermenüs in diesem Abschnitt fertig war, ging ich zum nächsten großen Abschnitt: "TV-Audio-y-Foto".

Und so weiter mit den 9 Abschnitten.

HTML ESTRUCTURE

den Quellcode der Suche, ich habe dazu kam:

1.- Haupt Rubrik: die Haupt-Header innerhalb eines 'nav' tag:

<nav id="headerMainMenu> 

2.- Innerhalb der 'Nav' Tag ist eine 'ul', und jede 'il' innerhalb hat und 'ID' für jeden der 9 Abschnitte:

<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.- Im Inneren der il Elemente gibt es div Elemente die Links enthalten, die wir benötigen: Bitte, die <a> mit der class = "subnav__title" bemerken.

<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 zu jedem Abschnitt zu gehen verwenden:

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

Aber tut zeigt so diesen Fehler:

> 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 

* Ich denke, das question von sein könnte Hilfe. Aber ich verstehe es nicht.

** Ich denke, mein CSS ist Okay.

Antwort

0

Wenn eines Ihrer Elternelemente des fraglichen Elements das Attribut 'display: invisible' hat, sind alle untergeordneten Elemente für Selen unsichtbar. Sie müssen ein solches Szenario mit JavaScript hacken und mit Javascript darauf klicken klicken. Hinweis: Es kann nachteilige Auswirkungen haben.

1

Ich habe den folgenden Code für Python verwendet. Ich bin sicher, es kann in Ihre Sprache konvertiert werden:

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 
+0

Danke für den Versuch, @Matzeg. Ich denke, Chui hat die Antwort. Ich muss es testen, um ihm vollen Kredit zu geben. Aber danke! –

1

Sie müssen zuerst auf das übergeordnete Menü klicken. Wenn das Untermenü sichtbar ist, klicken Sie auf das Untermenü.

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

Sie können auch erscheint gelegentlich müssen die modalen Popup schließen, die.

+0

Danke Chui, ich werde das versuchen. Können Sie den Teil über das Popup posten und aktualisieren? Wie man es ablehnt? Vielen Dank! –

+0

Leider erschien das Popup nicht wieder für mich. Sie sollten die [x] -Schaltfläche über CSS finden, und falls vorhanden, klicken Sie darauf. –

+0

Hi Chui, ich verstehe nicht, warum man auf das Hauptmenü klicken muss? In einem normalen Browser wird bei "Hover" nicht "Klick" aktiviert. Bitte, können Sie eine Erklärung geben? –