使用Python Playwright选中下拉框值失败,Mês选项无法选中求助
问题排查与解决方案
核心原因
frmVisao:meses下拉框的选项是动态加载的:只有在选择periodo(年份)之后,后端才会返回对应年份的月份选项并渲染到页面上。原代码中没有等待该下拉框的选项加载完成就直接执行选择操作,导致Playwright无法找到目标选项。
修复步骤
- 等待下拉框可交互:在选择月份前,先确认
frmVisao:meses元素处于可操作状态。 - 等待目标选项出现:确保要选择的月份选项(
03)已经被渲染到页面中。 - 明确指定选择方式:使用
value参数明确指定要选择的选项值,避免匹配歧义。
修改后的代码
from playwright.sync_api import sync_playwright, expect with sync_playwright() as p: nav = p.chromium.launch(headless=False) page = nav.new_page() page.goto('https://www4.trf5.jus.br/diarioeletinternet/paginas/consultas/consultaDiario.faces') # 选择前三个下拉框 page.locator("[name='frmVisao:orgao']").select_option('Seção Judiciária do Sergipe') page.locator("[name='frmVisao:edicao']").select_option('Administrativo') page.locator("[name='frmVisao:periodo']").select_option('2021') # 等待月份下拉框就绪并确认目标选项存在 meses_locator = page.locator("#frmVisao:meses") expect(meses_locator).to_be_enabled() expect(meses_locator.locator("option[value='03']")).to_be_visible() # 选择目标月份 meses_locator.select_option(value='03') page.wait_for_timeout(5000) nav.close()
额外说明
- 使用
expect断言可以更可靠地确保元素状态符合预期,比单纯的等待方法容错性更强。 - 若仍出现异常,可尝试添加
page.wait_for_load_state('networkidle'),确保页面网络请求完全结束后再执行后续操作。
内容的提问来源于stack exchange,提问作者João Bosco
相关产品推荐
相关产品推荐

