python - PhantomJS 看不到由 AJAX 填充的下拉选项

标签 python ajax selenium-webdriver phantomjs html-select

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

页面中有一个下拉菜单,选中后会填充另一个下拉菜单的选项。当我使用 Firefox 自动执行此操作时,当我在第一个下拉菜单中选择_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)

我尝试使用硬编码 sleep 而不是自定义等待条件,并检查了 DOM - 第二个下拉列表根本不会被填充。

这会不会是网页本身的问题?如果是这样,我该如何解决这个问题?

编辑:澄清一下,这适用于 Selenium+Firefox,所以这可能是 PJS 驱动程序本身的错误。

最佳答案

我找到了解决这个问题的办法,所以最好把它留在这里以供后代使用。

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

仍然不知道这个网页有什么问题。

关于python - PhantomJS 看不到由 AJAX 填充的下拉选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22210251/

相关文章:

javascript - 如何获取 JSON URL 文件并使其不断更新

java - 使用 Selenium WebDriver 的带有 contains() InvalidSelectorException 的 CSS 定位器

python - Django:如何将上下文提供给 FormView get() 方法(也使用请求参数)

python - 查找第一个元素等于第二个元素加一的元组

javascript - ajax 不适用于默认域

python - 如何确定是否为 Selenium + Python 加载了一些 HTML 元素?

javascript - 如何与 JS/nightwatchjs 并行运行多个测试?

python - 创建一个 Tkinter 按钮到 'clear' 输出

python - 创建 Pandas DataFrame 的元素并将其设置为列表

javascript - jquery + ajax。我的 javascript 函数出了什么问题?删除记录、添加记录而不刷新