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

使用Python提交网页表单并获取提交后的页面内容

使用Mechanize提交表单并验证结果

一、正确的Mechanize代码示例

先给出可运行的代码,包含表单选择、参数填充、提交及内容保存的完整流程:

import mechanize

# 初始化浏览器对象
br = mechanize.Browser()
br.set_handle_robots(False)  # 跳过robots.txt限制
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36')]

# 目标页面URL
target_url = "http://www.vproce.net/deu-hdp.html"

try:
    # 打开目标页面
    br.open(target_url)
    
    # 先查看页面所有表单(首次运行时可以取消注释,找到要提交的表单索引)
    # for idx, form in enumerate(br.forms()):
    #     print(f"表单索引 {idx}: {form}")
    
    # 选择对应表单(这里假设是第一个表单,根据实际输出调整nr值)
    br.select_form(nr=0)
    
    # 填充指定参数
    br["donem"] = "303"
    br["fakulte2"] = "107"
    br["hafta"] = "03/10/2022_09/10/2022"
    br["hoca"] = "14_382"
    
    # 提交表单并获取响应
    response = br.submit()
    
    # 读取并解码页面内容(根据页面实际编码调整,比如iso-8859-1)
    page_content = response.read().decode('utf-8')
    
    # 保存页面到本地,方便对比验证
    with open("submitted_result.html", "w", encoding='utf-8') as f:
        f.write(page_content)
        
    print("表单提交完成,结果页面已保存为submitted_result.html")
    
except Exception as e:
    print(f"提交出错: {str(e)}")

二、验证表单是否按预期提交

  • 检查参数填充正确性:在提交前添加打印代码,确认参数是否正确赋值:
    # 选择表单后添加
    print("待提交参数:")
    for control in br.form.controls:
        if control.name in ["donem", "fakulte2", "hafta", "hoca"]:
            print(f"{control.name}: {control.value}")
    
  • 对比手动提交结果:手动打开目标网页,填入相同参数提交,将得到的页面和代码生成的submitted_result.html对比,内容一致则说明提交成功。
  • 查看响应状态码:提交后打印响应状态码,200表示请求成功,4xx/5xx则说明请求存在错误:
    print(f"响应状态码: {response.code}")
    

三、提交后获取新页面内容的方法

  1. 直接读取响应内容:通过response.read()获取字节流,解码为字符串即可得到页面源码:
    page_content = response.read().decode('utf-8')
    
  2. 获取最终跳转URL:如果提交后页面发生跳转,用br.geturl()获取最终页面的URL:
    final_page_url = br.geturl()
    print(f"提交后最终页面URL: {final_page_url}")
    
  3. 解析页面数据(可选):结合BeautifulSoup提取页面中的特定信息,比如标题、表格内容:
    from bs4 import BeautifulSoup
    
    soup = BeautifulSoup(page_content, 'html.parser')
    # 提取页面标题
    page_title = soup.title.string
    print(f"页面标题: {page_title}")
    # 提取页面内的表格数据(示例)
    tables = soup.find_all('table')
    for table in tables:
        print(table.get_text(strip=True))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:10:11