You need to enable JavaScript to run this app. 如何使用mechanize通过ID而非表单名填充并提交无submit元素的表单
优惠活动
大模型
产品
解决方案
定价
更多

如何使用mechanize通过ID而非表单名填充并提交无submit元素的表单

地理编码自动化提交表单解决方案

核心问题说明

目标网站的表单提交由find按钮的JS点击事件触发,没有标准<input type='submit'>元素,mechanize默认的提交逻辑无法识别提交控件,但我们可以跳过控件识别直接模拟表单提交动作。

方案1:mechanize 库实现

你可以直接填充表单字段后提交,不需要指定提交按钮,mechanize会自动沿用表单默认的提交配置:

import mechanize

def get_lng_lat(address):
    br = mechanize.Browser()
    br.set_handle_robots(False)
    # 打开目标页面
    br.open("https://www.latlong.net/convert-address-to-lat-long.html")
    # 选中页面第一个表单
    br.select_form(nr=0)
    # 填充地址字段,字段name为addr
    br["addr"] = address
    # 直接提交,无需指定submit控件
    resp = br.submit()
    html_content = resp.read().decode("utf-8")
    # 提取经纬度
    lat = html_content.split('id="lat" value="')[1].split('"')[0]
    lng = html_content.split('id="lng" value="')[1].split('"')[0]
    return float(lat), float(lng)

# 调用示例
print(get_lng_lat("上海市东方明珠"))

方案2:requests 库实现(更推荐)

目标网站提交逻辑非常简单,直接模拟POST请求即可,无需加载完整页面资源,执行效率更高:

import requests
from bs4 import BeautifulSoup

def get_lng_lat(address):
    url = "https://www.latlong.net/convert-address-to-lat-long.html"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    }
    post_data = {"addr": address}
    resp = requests.post(url, headers=headers, data=post_data)
    soup = BeautifulSoup(resp.text, "lxml")
    lat = soup.select_one("#lat")["value"]
    lng = soup.select_one("#lng")["value"]
    return float(lat), float(lng)

# 调用示例
print(get_lng_lat("上海市东方明珠"))

注意事项

  • 频繁请求可能会触发网站的反爬限制,建议添加适当的请求间隔
  • 经纬度提取逻辑可以根据页面结构调整,使用BeautifulSoup等HTML解析库稳定性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 23:27:05