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驅動程序本身的錯誤。
你已經覆蓋了基地。我會開始使用'execute_script'來檢查JavaScript VM中發生了什麼。 – Louis
有一個onchange事件。當我嘗試:browser.execute_script('document.getElementById(「DropDown0」)。dispatchEvent(「onchange」)');我收到一個異常說: {u'message':u'UNSPECIFIED_EVENT_TYPE_ERR:DOM事件異常0'}。我究竟做錯了什麼? –
['dispatchEvent'](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.dispatchEvent)需要一個'Event'對象,不是? – Louis