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

Selenium(Python)无name/id定位时如何输入邮编并提交表单

Selenium无id/name属性时定位表单元素实现邮编输入与提交

对应页面源码

<div class="container-fluid" id="basicpage">
  <div class="container">
    <div class="row">
      <div id=right_col class="col-xs-12 col-md-9">  
        <div class=nothingwrapper></div>
        <div class=nothingwrapper>
          <h1>Postcode Snapshot </h1>
          <p> Please type in the postcode for which you would like to download a postcode snapshot:</p>
          <form action="postcodesnapshotchoosepostcode.php" method="post">
            <input name=sub value=1 type=hidden>
            <p><input type="text" name=postcode size=5></p>
            <p><input type=submit value='Continue' /></p>
          </form>
          <p>&nbsp;</p>
        </div>
      </div>
    </div>
  </div>
</div>

原有代码的问题

  • 定位目标错误:name="sub"的是表单内置的隐藏传参字段,不是用户可见可点击的Continue提交按钮,对这个元素做提交操作不符合交互逻辑
  • 语法错误:By.NAME是定位策略枚举值,find_element的正确传参格式是find_element(定位策略, 定位值),不能写成By.NAME("sub")的调用形式

实现方案

当元素没有可用的id、name属性时,优先用CSS选择器或XPath,结合元素标签、其他属性、层级关系完成定位,配合显式等待避免页面未渲染完成的定位失败问题,完整代码如下:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化等待对象,最长等待10秒直到元素可交互
wait = WebDriverWait(driver, 10)

# 定位邮编输入框:匹配表单下type为text的输入框,清空后输入3000
# 如果postcode的name属性也不可用,可以把定位规则改成匹配size=5的text类型input
postcode_input = wait.until(EC.element_to_be_clickable(
    (By.CSS_SELECTOR, "form input[type='text'][name='postcode']")
))
postcode_input.clear()
postcode_input.send_keys("3000")

# 定位提交按钮:匹配表单下value为Continue的submit类型按钮,点击提交
submit_btn = wait.until(EC.element_to_be_clickable(
    (By.CSS_SELECTOR, "form input[type='submit'][value='Continue']")
))
submit_btn.click()

其他可选写法

  • 如果不想单独定位提交按钮,输入完邮编后直接调用postcode_input.submit(),会自动触发输入框所属表单的提交逻辑,效果和点提交按钮一致
  • 不习惯用CSS选择器的话,也可以换XPath定位:
    • 邮编输入框XPath://p/input[@type='text' and @size='5']
    • 提交按钮XPath://input[@type='submit' and @value='Continue']

注意:不要对隐藏元素做点击、输入这类交互操作,Selenium本身会拦截对不可见元素的交互请求,直接抛异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:48:32