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

如何使用Selenium在表单提交后抓取第二页数据?

解决方案:动态页面数据抓取与CSV导出

针对你遇到的动态第二页数据抓取问题,以下是修正后的代码和关键说明,可实现表单字段提取并导出到CSV:

核心问题修复点

  • 补充页面加载等待机制,避免因元素未加载导致的查找失败
  • 修正变量名错误(原代码中browser未定义,统一使用driver)
  • 导入StaleElementReferenceException异常类,处理页面跳转后的元素失效问题
  • 添加CSV文件导出逻辑,实现数据持久化

完整代码实现

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

# 配置Chrome浏览器选项
chrome_options = Options()
chrome_options.add_argument("start-maximized")
chrome_options.add_argument("disable-infobars")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.thegeneral.com")

# 定位邮政编码输入框并提交
zip_input = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "free-quote-zip")))
zip_input.click()
zip_input.clear()
zip_input.send_keys("63013")
zip_input.submit()

# 等待第二页核心元素加载完成(根据实际页面调整等待目标)
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "autoInsurance")))

# 提取表单所有字段数据
form_data = {}
# 抓取表单内的输入框、下拉框(可根据页面结构调整选择器)
form_elements = driver.find_elements(By.CSS_SELECTOR, "#autoInsurance input, #autoInsurance select, #autoInsurance textarea")
for elem in form_elements:
    field_id = elem.get_attribute("id")
    field_name = elem.get_attribute("name")
    field_value = elem.get_attribute("value")
    # 优先用name作为键,无name则用id
    key = field_name if field_name else field_id
    if key:
        form_data[key] = field_value

# 将数据写入CSV文件
with open("insurance_form_data.csv", "w", newline="", encoding="utf-8") as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=form_data.keys())
    writer.writeheader()
    writer.writerow(form_data)

print("表单数据已成功导出到insurance_form_data.csv")
driver.quit()

注意事项

  • 若autoInsurance不是第二页的标志性元素,需替换为页面加载完成后必出现的元素(如特定标题、按钮)
  • 可根据表单实际HTML结构,调整CSS选择器或XPath,确保覆盖所有需要抓取的字段
  • 若页面存在AJAX异步加载内容,需额外添加对应元素的等待逻辑,避免遗漏数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:25:32