You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Playwright中通过列表顺序选择下拉列表的首个选项?

问题描述

我正在开发第一个编码项目:表单填充机器人,需求是无需提前知晓选项值,仅按列表顺序选择下拉列表的首个选项。

目前遇到的问题:该下拉列表会根据输入的名称筛选选项,我已实现输入名称的功能,但流程要求必须强制选中第一个选项。由于无法提前获取所有选项值,因此不能通过选项名称或value值来选择。

下拉列表示例代码

<select id="form:nomeAutor:listbox" name="form:nomeAutor:listbox" class="list-itens-au " size="2" onblur="com.corejsf.inputLostFocus(this)" onkeyup="com.autocomplete.submitEnter(this, event);" style="display: inline; position: absolute; left: 124.765625px; top: 800.109375px" onchange="mojarra.ab(this,event,'valueChange','form:nomeAutor','form:nomeAutor:nomeAutor form:nomeAutor:valueId')"> 
  <option value="2147898">ADAIR JOSE PEREIRA DA ROCHA (Doutorado)</option>
  <option value="1585496">FERNANDA NADAI (Graduação)</option>
</select>

当前代码

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()  # 添加括号调用函数
    page.goto("https://sucupira.capes.gov.br/sucupira/coleta_online/producaoIntelectual/listaProducao.jsf")
    page.click("a[id='buttonAcessoCapes']")
    page.fill("input[name='login']",'00000000')
    page.fill("input[name='senha']",'00000000')
    page.click("button[id='textoBotao']")
    page.wait_for_timeout(2000)
    page.click("a[id='formPortais:portalCoordenadorPrograma']")
    page.click("a[id='formAbaColeta:btnProducaoIntelectual']")
    page.wait_for_timeout(3000)
    page.click("a[id='form:btnCadastrarProducao']")
    page.fill("input[id='form:nome']",'A relação entre a autoeficácia e o autoconceito em jovens atletas de futebol: uma revisão de escopo.')
    page.fill("input[id='form:anoPublicacao']",'2022')
    page.select_option("select[id='form:categoria']", 'Discente' )
    page.wait_for_timeout(3000)
    page.locator("input[name=\"form\\:nomeAutor\\:input\"]").type("ADAIR JOSÉ PEREIRA DA ROCH")
    page.wait_for_timeout(1000)
    page.locator("[id=\"form\\:nomeAutor\\:listbox\"]").select_option(all)
    page.get_by_role("button", name="Adicionar Autor").click(button="left")
    page.get_by_role("button", name="Próximo >>").click(button="left")
    page.wait_for_timeout(1000)
    page.locator("[id=\"form\\:tipo\"]").select_option("2")
    page.wait_for_timeout(1000)
    page.locator("[id=\"form\\:subtipo\"]").select_option("25")
    page.wait_for_timeout(2000) 

解决方案

Playwright的select_option方法支持通过索引选择选项,直接指定索引0即可选中第一个选项,无需依赖选项的value或文本。同时建议用元素等待替代固定超时,提升代码稳定性。

修改后的代码如下:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto("https://sucupira.capes.gov.br/sucupira/coleta_online/producaoIntelectual/listaProducao.jsf")
    
    # 登录流程
    page.click("a#buttonAcessoCapes")
    page.fill("input[name='login']", '00000000')
    page.fill("input[name='senha']", '00000000')
    page.click("button#textoBotao")
    page.wait_for_selector("a#formPortais:portalCoordenadorPrograma")
    page.click("a#formPortais:portalCoordenadorPrograma")
    
    # 进入知识产权填报页面
    page.click("a#formAbaColeta:btnProducaoIntelectual")
    page.wait_for_selector("a#form:btnCadastrarProducao")
    page.click("a#form:btnCadastrarProducao")
    
    # 填写基础信息
    page.fill("input#form:nome", 'A relação entre a autoeficácia e o autoconceito em jovens atletas de futebol: uma revisão de escopo.')
    page.fill("input#form:anoPublicacao", '2022')
    page.select_option("select#form:categoria", 'Discente')
    
    # 处理作者下拉选择
    page.locator("input[name=\"form\\:nomeAutor\\:input\"]").type("ADAIR JOSÉ PEREIRA DA ROCH")
    # 等待下拉框加载完成,通过索引选中第一个选项
    listbox = page.locator("[id=\"form\\:nomeAutor\\:listbox\"]")
    listbox.wait_for()
    listbox.select_option(index=0)
    
    # 后续操作
    page.get_by_role("button", name="Adicionar Autor").click()
    page.get_by_role("button", name="Próximo >>").click()
    
    page.locator("[id=\"form\\:tipo\"]").select_option("2")
    page.locator("[id=\"form\\:subtipo\"]").select_option("25")
    
    # 可选:关闭浏览器
    # browser.close()

关键修改说明

  1. 将page.locator("[id=\"form\\:nomeAutor\\:listbox\"]").select_option(all)替换为listbox.select_option(index=0),直接通过索引选中第一个选项
  2. 用wait_for_selector或wait_for()替代部分固定超时,避免页面加载慢导致的元素未找到问题
  3. 简化元素选择器写法(如a#buttonAcessoCapes等价于a[id='buttonAcessoCapes']),提升代码可读性

内容的提问来源于stack exchange,提问作者Robson martins dos santos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:47:05