PhantomJS无法看到通过AJAX填充的下拉选项

3 投票
1 回答
1030 浏览
提问于 2025-04-17 21:00

我一直在用Python的PhantomJS/Selenium来抓取一个网站。

这个网页上有一个下拉菜单,当我选择它的时候,另一个下拉菜单的选项会被填充。当我用Firefox自动化这个过程时,选择第一个下拉菜单的可见文本后,第二个下拉菜单就会被填充。

但是,使用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)

我尝试用硬编码的睡眠时间来代替自定义的等待条件,并检查了网页的结构——第二个下拉菜单根本没有被填充。

这可能是网页本身的问题吗?如果是的话,我该怎么解决这个问题呢?

补充说明:为了更清楚,这在Selenium+Firefox下是可以正常工作的,所以有可能是PJS驱动本身的一个bug。

1 个回答

1

我找到了解决办法,所以把它留在这里,以备后用。

我在页面的表单里有一个输入框,所以在选择第一个下拉菜单后,我把光标移到了输入框,然后按了回车键。这样第二个下拉菜单就立刻加载出来了。

不过我还是不知道这个网页到底出了什么问题。

撰写回答