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

使用Python Requests提交表单未获取网页预期查询结果的技术求助

解决requests提交表单未返回预期结果的问题

你的代码没拿到预期结果,大概率是这几个原因导致的,对应解决方法如下:

1. 确认表单的实际提交目标和请求方法

很多网站的表单不会直接提交到当前页面,你需要先排查:

  • 打开目标页面,按F12打开开发者工具,切换到Network标签
  • 手动提交一次查询,找到对应的请求,查看:
    • Request URL:这才是真正要提交的接口地址,不是当前页面的URL
    • Request Method:确认是POST还是GET,你的代码用了POST,但实际可能是GET

2. 补全所有必填表单字段

只传wavelength_range可能不够,表单通常包含隐藏字段(比如CSRF令牌)或其他必填项:

  • 在Network的请求详情里,查看Form Data部分,把所有字段都加入你的请求数据中
  • 比如很多Django站点会要求csrfmiddlewaretoken字段,这个需要先从页面源码中提取

3. 模拟浏览器请求头

服务器可能会拒绝无标识的请求,需要添加User-Agent等头信息模拟浏览器

修正后的示例代码

情况1:表单是POST提交且需要CSRF令牌

import requests
import re

# 用会话保持cookie,避免重复处理
session = requests.Session()
base_url = "https://linelist.pa.uky.edu/newpage/"
headers = {
    "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"
}

# 先访问页面,获取CSRF令牌和cookie
page_res = session.get(base_url, headers=headers)
csrf_token = re.search(r'<input type="hidden" name="csrfmiddlewaretoken" value="(.*?)">', page_res.text).group(1)

# 构造完整表单数据(根据实际Form Data调整)
form_data = {
    "wavelength_range": "6100-6500",
    "csrfmiddlewaretoken": csrf_token,
    "submit": "Search"  # 假设提交按钮的name是submit,值为Search
}

# 替换为实际的提交接口URL
submit_url = "https://linelist.pa.uky.edu/newpage/submit"
result_res = session.post(submit_url, data=form_data, headers=headers)

print(result_res.text)

情况2:页面用JS动态渲染结果

如果查询结果是通过JavaScript加载的,requests无法获取动态内容,需要用Selenium模拟浏览器:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化浏览器(需要对应浏览器的驱动)
driver = webdriver.Chrome()
driver.get("https://linelist.pa.uky.edu/newpage/")

# 输入波长范围
input_field = driver.find_element(By.NAME, "wavelength_range")
input_field.send_keys("6100-6500")

# 点击提交按钮
submit_btn = driver.find_element(By.CSS_SELECTOR, 'input[type="submit"]')
submit_btn.click()

# 等待结果加载完成(根据实际页面元素调整等待条件)
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "result-content"))
)

# 打印结果页面内容
print(driver.page_source)

driver.quit()

关键排查步骤

始终以浏览器实际发送的请求为标准:

  1. 手动提交查询,抓包看完整请求参数
  2. 对比你的代码请求和浏览器请求的差异(URL、方法、字段、头信息)
  3. 逐步调整代码,对齐浏览器的请求格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:20:03