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

Playwright Python实现点击多按钮中特定Submit按钮问题求助

Playwright Python 表单按钮定位问题

问题背景

之前用Playwright NodeJS版本成功实现表单自动化填充,移植到Python API时遇到差异:页面存在Submit和Random两个按钮,使用get_by_role能找到所有按钮,但无法定位特定的Submit按钮。

页面HTML结构

<form method="post" action="?query=MyAPI" enctype="multipart/form-data">
    <table style="width: 100%">
        <tbody><tr>
            <td style="width: 146px">URL:</td>
            <td><input name="url" type="text" style="width: 100%"></td></tr>

            <tr><td style="width: 146px">&nbsp;</td>
            <td><br>
                <input name="Random" type="random" value="Random" style="width: 97px">
                <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    <input name="Submit" type="submit" value="Submit" style="width: 157px">
                    &nbsp; </span>
            </td></tr>
    </tbody></table>
</form>

NodeJS 成功代码

await page.getByRole('button', { name: 'Submit' }).click();

尝试过的无效Python代码

page.get_by_role('button').get_by_text('Submit').click()
page.get_by_role('button', {'name': 'Submit'}).click()

可行的解决方法

  • 正确使用get_by_role的name参数
    Python版本的get_by_role支持直接传入关键字参数,而非字典格式,修正后的代码:

    page.get_by_role("button", name="Submit").click()
    

    这里的name参数会匹配按钮的可见文本或value属性,对应Submit按钮的value值,能精准定位。

  • 通过value属性直接定位
    利用按钮的value="Submit"属性定位,方法更直接:

    page.get_by_value("Submit").click()
    
  • 通过name属性定位
    按钮的name="Submit"属性也可以作为定位依据:

    page.get_by_name("Submit").click()
    
  • 使用XPath定位(备选方案)
    如果上述语义化定位方法都不生效,可使用提供的XPath直接定位:

    page.locator("/html/body/div[1]/div[2]/div[2]/article[1]/form/table/tbody/tr[2]/td[2]/span/input").click()
    

    注意:XPath定位依赖页面结构,若页面布局变更可能失效,优先使用前面的语义化方法。

内容的提问来源于stack exchange,提问作者MC874

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:50:45