如何用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()
常见问题解决
- 元素定位失败:如果用ID/NAME定位不到,打开浏览器开发者工具,复制元素的XPATH或CSS选择器替换到代码里。另外一定要用
WebDriverWait等待元素加载,避免页面还没渲染完就去操作。 - 日期格式不对:先手动在网站上试一次,确认要求的格式(比如是DD/MM/YYYY还是MM/DD/YYYY),脚本里的日期要完全匹配。
- 下载没反应:检查下载路径是否有写入权限,或者网站是否有反爬验证(比如验证码),如果有验证码可能需要额外处理(比如打码平台)。
为什么其他工具没成功?
requests/BeautifulSoup:适合静态页面,但若表单提交是AJAX请求、有JS验证,或者下载需要携带会话Cookie,手动构造请求会非常麻烦。Scrapy:主打爬虫,处理表单提交需要手动构造FormRequest,对交互类场景不如Selenium直观。Mechanize:对现代JS渲染的网站支持很差,很多动态元素它识别不了。webbrowser:只能打开页面,没有任何交互控制能力,没法自动填表单和提交。
内容的提问来源于stack exchange,提问作者user3529864
相关产品推荐
相关产品推荐

