2016-07-28 23 views
2

Ich verwende Selen und Phantomjs und ich möchte lernen, wie man ein Kontrollkästchen richtig anklickt. Für exemple auf dieser Seite: https://www.udacity.com/courses/androidPhantomjs klicken Sie auf das Kontrollkästchen

Ich mag würde „Free Kurse“ überprüfen, so dass ich versuchte, dies:

from selenium import webdriver 
from selenium.webdriver.common.by import By 


def __init__(self): 
     self.driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs') 

    def parse(self, response): 
     self.driver.get(response.url) 
     element = self.driver.find_element(By.XPATH, '//div[@class="checkbox"]/label[contains(.,"Free Courses")]') 
     self.driver.execute_script("arguments[0].click();", element) 

Das Problem ist, dass es nichts zu werden braucht scheint klicken: mach einen Screenshot mit self.driver.save_screenshot('screenshot.png') gibt es alle Ergebnisse, nicht gefiltert. Ist es etwas, was ich falsch mache?

+0

Warum nicht verwenden 'self.driver.find_element (By.XPATH,‚// div [@ class = "Checkbox"]/Label [enthält (.“ Kostenlose Kurse ")] '). Click()'? Sie sollten auch 'input' Element anstelle von' label' verwenden. – Andersson

+0

Die .click() Funktion scheint in PhantomJS nicht unterstützt zu werden, siehe: http://stackoverflow.com/questions/15739263/phantomjs-click-an- element Es stimmt, dass ich das Etikett falsch benutzt habe. –

Antwort

0

Ihr xpath-label Element lokalisiert, während Sie auf checkbox Element klicken mögen, wie ich website in Ihrer zur Verfügung gestellt zu sehen bin, gibt es keine Notwendigkeit xpath erstellen Free Course Checkbox auswählen, können Sie einfach diese Checkbox finden mit By.NAME als unten: -

from selenium import webdriver 
from selenium.webdriver.common.by import By 


def __init__(self): 
     self.driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs') 

    def parse(self, response): 
     self.driver.get(response.url) 
     element = self.driver.find_element(By.NAME, 'Free Course') 
     element.click() 

Hinweis: - Selen bietet click() Funktion Klick auf ein Element auszuführen, so gibt es keine Notwendigkeit, execute_script zu verwenden, klicken Sie mit Javascript ausführen, wenn Sie konnte einfach d o dies mit click() Funktion.

Hoffe, es hilft ... :)

+0

Danke, es funktioniert! Ich habe execute_script benutzt, weil ich gelesen habe, dass in phantomJS die click() Funktion nicht funktioniert. Danke –

+1

@LaraM. Willkommen, ich bin froh, Ihnen helfen zu können. Wenn Sie ein wenig Reasone wie Design oder andere Probleme benötigen, klicken Sie auf '' '' '' funktioniert nicht, dann können Sie 'execute_script' verwenden, sonst' click() 'funktioniert einwandfrei .... :) –

+0

Ah ok, Vielen Dank!! –

Verwandte Themen