2016-10-07 7 views
0

Ich arbeite an der Erstellung eines Automatisierungs-Framework mit Selenium in Python, wo ich versuche, Landing Pages auf HubSpot.com durch Klicken auf die Schaltfläche "Weiter" zu durchlaufen.Klick durch Paginierung mit Selenium in Python

Die Schaltfläche Weiter wird in der folgenden HTML befindet nach dem Chrome-Inspektor:

<a class="next" data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0"> 
    <span data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0.1">Next</span> 
    <span class="right" data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0.2"></span> 
</a> 

Und ich Sie auf die Schaltfläche mit dem folgenden Python-Code:

time.sleep(3) 
wait(self.driver, """//a[@class="next" and not(@disabled)]""") 
      nextButton = self.driver.find_element(By.XPATH, """//a[@class="next" and not(@disabled)]""") 
      hov = ActionChains(self.driver).move_to_element(nextButton) 
      hov.click().perform() 

wo meine Wartezeit () Funktion ist definiert als:

def wait(dr, x): 
    element = WebDriverWait(dr, 5).until(
     EC.presence_of_element_located((By.XPATH, x)) 
    ) 
    return element 

Dies funktioniert ganz gut auf der ersten Seite. Aber aus irgendeinem Grund kann ich auf Seite zwei nicht auf den Button klicken. Keine Fehler, es fängt an zu tun, was es auf Seite drei tun sollte - aber auf Seite zwei. Wenn ich das Skript kurz vor dem Klicken auf die Schaltfläche Weiter auf der zweiten Seite stoppe, kann ich sehen, dass die Schaltfläche im Chromedriver hervorgehoben ist.

Die Schaltfläche Weiter wird in der folgenden HTML auf Seite 2 gemäß dem Chrome Inspector ::

Irgendwelche Vorschläge
<a class="next" data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0"> 
    <span data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0.1">Next</span> 
    <span class="right" data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0.2"></span> 
</a> 

liegt Ich habe keine Ideen mehr.

+0

Fängt es plötzlich an zu arbeiten, wenn Sie einen Schlaf zwischen dem 1. und 2. Klick hinzufügen? –

+0

Ich nehme an, Sie verwenden diesen Code zweimal (einmal pro Seite), oder? :) Warum verwenden Sie 'ActionChains' anstatt einfach' click() '? – Andersson

+0

@LeviNoecker: Ich habe schon zwischen den Klicks geschlafen. Das ändert leider nichts. – mfvas

Antwort

0

Ich habe es geschafft, einen Workaround zu finden. Anstatt auf den nächsten Button zu klicken, klicke ich auf den entsprechenden Seiten-Button. Ich definiere j = 2 mit zu beginnen, und verwenden Sie dann den folgenden Code:

if self.driver.find_elements(By.XPATH, """//a[@class="next" and not(@disabled)]""") != 0: 
       xpathstring = """//div[@class="hs-pagination"]/ul/li/a[text()="%s"]""" % (j) 
       waitclick(self.driver, xpathstring) 
       nextButton = self.driver.find_element(By.XPATH, xpathstring) 
       hov = ActionChains(self.driver).move_to_element(nextButton) 
       hov.click().perform() 
       time.sleep(3) 
       j = j + 1 

ich immer noch nicht verstehen, warum die erste Lösung nicht funktioniert, aber das ist eine Arbeitslösung durch Paginierung klicken.

Verwandte Themen