2014-03-05 27 views
3

我一直試圖在Python中使用PhantomJS/Selenium設置來刮取網站。PhantomJS沒有看到由AJAX填充的下拉選項

頁面中有一個下拉列表,當它被選中時,會填充另一個下拉列表的選項。當我使用Firefox自動執行此操作時,當我在第一個下拉列表中選擇select_by_visible_text時,第二個將被填充。

但是,相同的代碼不適用於PhantomJS。

browser = webdriver.PhantomJS(executable_path=PHANTOMJS_PATH) 
## browser = webdriver.Firefox() 
wait = WebDriverWait(browser, WAIT_TIME) 
browser.get(URL) 

Select(browser.find_element_by_id('DropDown0')).select_by_visible_text('XXX') 

def condition_wait_for_dropdown(driver): 
    ret = False 
    if driver.find_elements_by_xpath('//*[@id="DropDown1"]/option'): 
     ret = True 
    return ret 

wait.until(condition_wait_for_dropdown) 

我已經使用硬編碼的睡眠,而不是定製的等待狀態時嘗試,並檢查了DOM - 第二個下拉從來沒有被填充的。

這可能是網頁本身的問題嗎?如果是這樣,我該如何解決這個問題?

編輯:只是爲了澄清,這與Selenium + Firefox的工作,所以存在的可能性,這是PJS驅動程序本身的錯誤。

+0

你已經覆蓋了基地。我會開始使用'execute_script'來檢查JavaScript VM中發生了什麼。 – Louis

+0

有一個onchange事件。當我嘗試:browser.execute_script('document.getElementById(「DropDown0」)。dispatchEvent(「onchange」)');我收到一個異常說: {u'message':u'UNSPECIFIED_EVENT_TYPE_ERR:DOM事件異常0'}。我究竟做錯了什麼? –

+0

['dispatchEvent'](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.dispatchEvent)需要一個'Event'對象,不是? – Louis

回答

1

我找到了一個解決方案,所以最好留在這裏爲後代。

我在頁面表單中有一個輸入字段,所以選擇第一個下拉列表後,我將焦點移到了輸入字段,並向它發送了一個ENTER。第二個下拉列表立即被加載。

還不知道這個網頁是否有問題。