Python如何爬取提交表单后自动下载的XML文件?
提交表单后自动下载XML文件实现方案
你当前编写的代码已经完成了表单参数选择的逻辑,只需为Chrome浏览器添加下载偏好配置,即可实现提交表单后自动将XML文件保存到本地指定路径,无需手动确认下载操作。
核心配置修改点
- 提前创建本地存储XML的文件夹,配置到Chrome的默认下载路径参数中
- 禁用下载确认弹窗,跳过系统保存提示
- 允许站点自动下载多文件,避免多XML下载时的权限拦截
完整可运行代码
import os import time from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.select import Select # 请修改为你自己的本地存储路径,提前创建好该文件夹 download_path = r"C:\Users\你的用户名\Downloads\unemploy_xml" if not os.path.exists(download_path): os.makedirs(download_path) # 配置Chrome下载参数 chrome_options = webdriver.ChromeOptions() prefs = { "download.default_directory": download_path, # 设置默认下载路径 "download.prompt_for_download": False, # 禁用下载弹窗 "download.directory_upgrade": True, "safebrowsing.enabled": True, # 允许下载非安全标记的文件 "profile.default_content_setting_values.automatic_downloads": 1 # 允许多文件自动下载 } chrome_options.add_experimental_option("prefs", prefs) # 初始化driver,这里用你本地的chromedriver路径 service = Service(r"C:\Program Files (x86)\chromedriver.exe") driver = webdriver.Chrome(service=service, options=chrome_options) url = 'https://oui.doleta.gov/unemploy/claims.asp' driver.implicitly_wait(10) driver.get(url) # 原有表单填写逻辑 driver.find_element_by_css_selector('input[name="level"][value="state"]').click() Select(driver.find_element_by_name('strtdate')).select_by_value('2020') Select(driver.find_element_by_name('enddate')).select_by_value('2022') driver.find_element_by_css_selector('input[name="filetype"][value="xml"]').click() select = Select(driver.find_element_by_id('states')) # 全选所有州 for opt in select.options: opt.click() # 提交表单 driver.find_element_by_css_selector('input[name="submit"][value="Submit"]').click() # 等待下载完成,可根据文件大小调整等待时间,也可以写文件夹监控逻辑判断文件是否下载完成 time.sleep(30) # 下载完成后关闭浏览器 driver.quit()
注:如果你使用的是Selenium 3.x版本,可删除Service相关代码,直接将驱动路径传入executable_path参数即可:
driver = webdriver.Chrome(executable_path=r"C:\Program Files (x86)\chromedriver.exe", options=chrome_options)
下载完成后的XML处理
文件全部下载到指定文件夹后,你可以使用Python内置的xml.etree.ElementTree库解析XML内容,实现数据提取、格式转换等操作。
简单解析示例:
import xml.etree.ElementTree as ET import os for file_name in os.listdir(download_path): if file_name.endswith('.xml'): file_path = os.path.join(download_path, file_name) tree = ET.parse(file_path) root = tree.getroot() # 按节点结构提取你需要的字段即可
内容的提问来源于stack exchange,提问作者Nini
相关产品推荐
相关产品推荐

