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

获取无API文档网站的POST参数及Node.js选择器问题求助

解决无API文档网站的数据爬取问题

一、获取POST请求的精确参数

利用Selenium的Chrome DevTools Protocol(CDP)监听网络请求,直接捕获目标POST请求的参数:

  • 初始化浏览器驱动时启用DevTools,建立CDP连接
  • 开启Network监控,监听Network.requestWillBeSent事件
  • 过滤目标POST请求,提取请求体中的参数

代码示例:

const { Builder, Browser } = require('selenium-webdriver');
const { devtools } = require('selenium-webdriver/chrome');

async function capturePostParams() {
  const driver = await new Builder()
    .forBrowser(Browser.CHROME)
    .setChromeOptions(devtools())
    .build();

  const cdp = await driver.createCDPConnection('page');
  await cdp.send('Network.enable');

  cdp.on('Network.requestWillBeSent', (params) => {
    // 替换成目标接口的URL特征
    if (params.request.method === 'POST' && params.request.url.includes('target-api-path')) {
      console.log('原始POST参数:', params.request.postData);
      // 解析JSON格式参数
      if (params.request.postData) {
        try {
          const parsedParams = JSON.parse(params.request.postData);
          console.log('结构化POST参数:', parsedParams);
        } catch (e) {
          // 处理表单编码的参数
          const formParams = new URLSearchParams(params.request.postData);
          console.log('表单参数:', Object.fromEntries(formParams));
        }
      }
    }
  });

  // 执行登录与页面导航
  await driver.get('login-page-url');
  // ... 你的登录逻辑代码
  await driver.get('target-page-url');
  // ... 触发POST请求的操作

  // 等待请求完成后关闭浏览器
  await new Promise(resolve => setTimeout(resolve, 5000));
  await driver.quit();
}

capturePostParams();

二、迁移浏览器控制台爬取代码到Node.js

通过Selenium的executeScript方法,在浏览器上下文执行原控制台代码,再将结果带回Node.js处理:

  • 将原控制台的爬取逻辑封装为函数,确保返回结构化数据数组
  • 用driver.executeScript()执行该函数,获取爬取结果
  • 在Node.js中转换数据为CSV并保存

代码示例:

const { Builder, Browser } = require('selenium-webdriver');
const fs = require('fs');

async function scrapeAndSaveCSV() {
  const driver = await new Builder().forBrowser(Browser.CHROME).build();

  // 执行登录与导航到目标页面
  await driver.get('login-page-url');
  // ... 你的登录逻辑代码
  await driver.get('target-page-url');

  // 等待页面完全加载
  await driver.wait(async () => {
    return await driver.executeScript('return document.readyState === "complete"');
  }, 10000);

  // 执行原控制台的爬取代码(直接粘贴并调整为返回数据)
  const scrapedData = await driver.executeScript(() => {
    const rows = document.querySelectorAll('.target-table tr');
    const result = [];
    // 提取表头(如果需要)
    const headers = Array.from(document.querySelectorAll('.target-table th')).map(th => th.textContent.trim());
    result.push(headers);
    // 提取行数据
    rows.forEach(row => {
      const cols = Array.from(row.querySelectorAll('td')).map(td => td.textContent.trim());
      cols.length && result.push(cols);
    });
    return result;
  });

  // 转换为CSV格式(处理逗号转义)
  const csvContent = scrapedData
    .map(row => row.map(cell => `"${cell.replace(/"/g, '""')}"`).join(','))
    .join('\n');

  // 保存到本地文件
  fs.writeFileSync('scraped-data.csv', csvContent);

  await driver.quit();
}

scrapeAndSaveCSV();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:10:49