使用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}")
三、提交后获取新页面内容的方法
- 直接读取响应内容:通过
response.read()获取字节流,解码为字符串即可得到页面源码:page_content = response.read().decode('utf-8') - 获取最终跳转URL:如果提交后页面发生跳转,用
br.geturl()获取最终页面的URL:final_page_url = br.geturl() print(f"提交后最终页面URL: {final_page_url}") - 解析页面数据(可选):结合
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
相关产品推荐
相关产品推荐

