PhantomJS没有看到由AJAX填充的下拉选项

时间:2014-03-05 21:58:39

标签: python ajax selenium-webdriver phantomjs html-select

我一直在尝试使用Python中的PhantomJS / Selenium设置来抓取网站。

页面中有一个下拉列表,选中后会填充另一个下拉列表的选项。当我使用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驱动程序本身的错误。

1 个答案:

答案 0 :(得分:1)

我找到了解决这个问题的方法,所以最好把它留给后人。

我在页面表单中有一个输入字段,因此在选择第一个下拉列表后,我将焦点移动到输入字段,并向其发送了一个ENTER。第二个下拉列表立即加载。

仍然不知道这个网页是否有问题。