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

如何在Python中无需Selenium触发网页JS函数完成parsing任务

解决JS动态表单提交的Python解析方案

不用Selenium也能搞定,核心是直接模拟JS函数的逻辑,不用执行JS。先拆解你给的代码逻辑,再一步步实现:

1. 先搞懂JS函数到底做了什么

看你提供的submit函数,它的核心动作是:

  • 找到页面里的PostForm表单,添加两个隐藏字段Key和Title
  • 把传入的key、title参数赋值给这两个字段
  • 把表单的提交目标设为Groups.aspx,然后提交表单
  • 页面锚点的修改只是视觉跳转,不影响表单提交的核心逻辑

2. 从HTML里提取需要的参数

首先要把每个<a>标签里的submit参数和文本提取出来,用BeautifulSoup就能搞定:

from bs4 import BeautifulSoup

# 假设这是你爬取到的页面HTML内容
page_html = """
<a href="javascript:submit('RJuzPlvdavwzyOu12R7PKQ==','название товара....','0');">название товара....</a>
<a href="javascript:submit('another-key','另一个商品','1');">另一个商品</a>
"""

soup = BeautifulSoup(page_html, "html.parser")
items = []

for a_tag in soup.find_all("a", href=True):
    href = a_tag["href"]
    if not href.startswith("javascript:submit("):
        continue
    
    # 提取函数里的三个参数
    param_str = href[len("javascript:submit("):-1]
    # 分割并清理引号和空格
    key, title, value = [p.strip().strip("'") for p in param_str.split(",")]
    # 提取商品文本
    item_text = a_tag.get_text(strip=True)
    
    items.append({
        "text": item_text,
        "key": key,
        "title": title,
        "value": value
    })

# 打印提取结果
for item in items:
    print(f"文本: {item['text']}, Key: {item['key']}, Title: {item['title']}")

3. 模拟表单提交(获取实际跳转后的内容)

JS最终是提交表单到Groups.aspx,我们直接用requests模拟这个POST请求就行,注意要保持会话(带cookies),如果网站有ASPX的验证字段,还要提取ViewState:

import requests
from bs4 import BeautifulSoup

# 替换成目标网站的基础域名
BASE_URL = "https://目标网站域名.com"
# 原页面的URL(就是包含这些a标签的页面)
ORIGINAL_PAGE_URL = f"{BASE_URL}/包含a标签的页面路径"
# 表单提交的目标URL
SUBMIT_TARGET = f"{BASE_URL}/Groups.aspx"

# 初始化会话,保持cookies
session = requests.Session()
# 先请求原页面,获取会话和可能需要的ASPX验证字段
original_response = session.get(ORIGINAL_PAGE_URL)
original_soup = BeautifulSoup(original_response.text, "html.parser")

# 提取ASPX页面的必要隐藏字段(如果有的话,没有可以删掉这部分)
form_data = {}
for field in ["__VIEWSTATE", "__VIEWSTATEGENERATOR", "__EVENTVALIDATION"]:
    input_tag = original_soup.find("input", {"name": field})
    if input_tag:
        form_data[field] = input_tag["value"]

# 遍历之前提取的每个商品,模拟提交
for item in items:
    # 添加Key和Title字段
    form_data["Key"] = item["key"]
    form_data["Title"] = item["title"]
    
    # 提交表单
    submit_response = session.post(SUBMIT_TARGET, data=form_data)
    
    # 这里可以处理提交后的响应,比如提取跳转后的页面内容
    print(f"处理商品: {item['text']},响应状态码: {submit_response.status_code}")
    # 如果需要保存页面内容
    # with open(f"{item['text']}.html", "w", encoding="utf-8") as f:
    #     f.write(submit_response.text)

注意事项

  • 网站可能有反爬,记得在请求头里加User-Agent,模拟浏览器请求:
    session.headers.update({
        "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"
    })
    
  • 如果表单是GET方法(看原页面<form>标签的method属性),就把post改成get,并把data换成params
  • 锚点value参数不影响表单提交,除非网站后端会读取锚点,但根据JS逻辑,这只是修改当前页面URL,不用管它

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:32:04