我一直在尝试使用 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/