2016-07-28 123 views
2

我正在使用硒和phantomjs,我想了解如何正確點擊複選框。對於在本頁面爲例:https://www.udacity.com/courses/androidPhantomjs點擊複選框

我想檢查「免費課程」,所以我想這:

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) 

的問題是,它似乎並不被點擊任何東西:做一個截圖與self.driver.save_screenshot('screenshot.png')它給出了所有的結果,沒有過濾。 這是我做錯了什麼?

+0

爲什麼不用'self.driver.find_element(By.XPATH,「// DIV [@類= 「複選框」] /標籤[包含(。,」免費課程「)]')。click()'?您也應該使用'input'元素來代替'label' – Andersson

+0

PhantomJS中似乎不支持.click()函數,請參閱:http://stackoverflow.com/questions/15739263/phantomjs-click-an-element 這是真的,我錯誤地使用標籤。 –

回答

0

xpath當你想點擊checkbox元素定位於label元素,正如我在您提供的website我看到,有沒有必要建立xpath選擇Free Course複選框,你可以簡單地找到使用By.NAME作爲此複選框如下: -

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

注意: - 硒提供click()功能的元素進行點擊,所以沒有必要使用execute_script由JavaScript執行的點擊,如果你可以簡單地d通過使用click()函數。

希望它能幫助... :)

+0

謝謝,它的工作原理!我使用了execute_script,因爲我在PhantomJS中讀到了click()函數不起作用。謝謝 –

+1

@LaraM。你很高興,很高興爲你提供幫助。因爲有些reasone像設計或其他問題'click()'不起作用,所以你可以使用'execute_script',否則'click()'完美地工作...... :) –

+0

啊,謝謝!! –