使用Python Playwright从下拉菜单选择值
我正在用Python的Playwright库从下拉菜单中选择一个值,但它不管用。

我可以成功获取前三个值,但那个标签为“Mês”的选项就是不行。
这是我的代码:
from playwright.sync_api import sync_playwright, Playwright
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;jsessionid=A7EF0E11BE9943A9942B54CE45F7C7F9')
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')
page.locator('xpath=//*[@id="frmVisao:meses"]').select_option('03')
page.wait_for_timeout(5000)
nav.close()
有没有人知道我哪里出错了?
这是网站链接:https://www4.trf5.jus.br/diarioeletinternet/paginas/consultas/consultaDiario.faces。
2 个回答
0
作为一个好的习惯,在页面导航时,首先要确认一个可见的元素——通常是最后加载出来的那个元素(最好是图片),然后再进行其他操作。
page.goto('URL')
# Verify first a specific element is visible.
expect(page.get_by_text("Welcome")).to_be_visible()
0
你的代码在我这边运行得很好。那些月份的选项会在你选择其他字段后自动填充,所以你可以使用 wait_for_function()
来等待月份选项出现,这样可以避免出现竞争条件的问题:
from playwright.sync_api import sync_playwright # 1.40.0
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("<Your URL>")
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")
page.wait_for_function("""
document
.querySelectorAll('[name="frmVisao:meses"] option')
.length > 11
""")
page.locator('[name="frmVisao:meses"]').select_option("03")
page.screenshot(path="verify.png")
browser.close()
一个更准确(也可能更好的)做法是,等到三月的具体选项可用时再继续:
page.wait_for_function("""
document.querySelector('[name="frmVisao:meses"] option[value="03"]')
""")