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

如何用Python自动填写表单、提交并下载响应ZIP文件

我来帮你搞定这个自动下载Bhavcopy ZIP的脚本!既然你试过不少工具,那咱们重点用Selenium来实现——它对这类需要模拟用户真实交互的场景支持最好,能完美处理表单填写、提交和文件下载的全流程。

先理清楚核心思路

目标网站需要交互选择Bhavcopy、填写有效日期、提交后触发ZIP下载,这类带动态交互的场景,Selenium是最省心的选择,因为它直接模拟浏览器操作,能绕过很多静态工具(比如requests/BeautifulSoup)搞不定的JS验证、会话跟踪问题。

步骤1:准备工作

先安装依赖并配置浏览器驱动:

  • 安装Selenium:pip install selenium
  • 下载对应你浏览器版本的驱动(比如Chrome用ChromeDriver),放到系统PATH里,或者在脚本里指定驱动路径。

步骤2:完整示例脚本

下面是可直接调整使用的代码,注释里标了需要替换的地方:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 配置Chrome浏览器选项,指定下载路径并关闭下载弹窗
chrome_options = Options()
# 替换成你想保存ZIP的本地路径
download_directory = "/Users/yourname/Downloads/Bhavcopies"
chrome_options.add_experimental_option("prefs", {
    "download.default_directory": download_directory,
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
})

# 初始化浏览器(如果驱动没在PATH里,要加executable_path参数指定路径)
driver = webdriver.Chrome(options=chrome_options)

try:
    # 导航到目标页面,替换成实际的表单页面URL
    driver.get("https://your-target-form-page.com")

    # 等待页面加载,选择Bhavcopy选项(这里假设是单选按钮,用XPATH定位,可根据实际元素调整)
    bhavcopy_option = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//input[@value='bhavcopy']"))
    )
    bhavcopy_option.click()

    # 填写有效日期(替换成你需要的日期,注意网站要求的格式,比如DD/MM/YYYY)
    target_date = "12/10/2024"
    date_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "date-input-field"))
    )
    date_input.clear()
    date_input.send_keys(target_date)

    # 提交表单(同样根据实际按钮的定位方式调整)
    submit_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "submit-button"))
    )
    submit_button.click()

    # 等待下载完成(根据文件大小调整等待时间,或者可以写个方法检测文件是否存在)
    time.sleep(8)

finally:
    # 不管成功失败都关闭浏览器
    driver.quit()

常见问题解决

  1. 元素定位失败:如果用ID/NAME定位不到,打开浏览器开发者工具,复制元素的XPATH或CSS选择器替换到代码里。另外一定要用WebDriverWait等待元素加载,避免页面还没渲染完就去操作。
  2. 日期格式不对:先手动在网站上试一次,确认要求的格式(比如是DD/MM/YYYY还是MM/DD/YYYY),脚本里的日期要完全匹配。
  3. 下载没反应:检查下载路径是否有写入权限,或者网站是否有反爬验证(比如验证码),如果有验证码可能需要额外处理(比如打码平台)。

为什么其他工具没成功?

  • requests/BeautifulSoup:适合静态页面,但若表单提交是AJAX请求、有JS验证,或者下载需要携带会话Cookie,手动构造请求会非常麻烦。
  • Scrapy:主打爬虫,处理表单提交需要手动构造FormRequest,对交互类场景不如Selenium直观。
  • Mechanize:对现代JS渲染的网站支持很差,很多动态元素它识别不了。
  • webbrowser:只能打开页面,没有任何交互控制能力,没法自动填表单和提交。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:12:51