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

Node.js服务端填充HTML表单遇form-scraper模块报错求助

解决form-scraper中"Cannot read property 'get' of undefined"报错

我来帮你搞定这个报错问题!这个错误的核心原因是你用promisified-request创建的请求实例,和form-scraper期望的请求对象格式不匹配——form-scraper试图调用请求对象的get方法,但你的pRequest实例里根本没有这个方法。下面给你几个可行的解决方案:

方案1:调整promisified-request的初始化方式

有些版本的promisified-request不需要调用.create(),直接导出的就是可用的请求对象。你可以试试把代码改成这样:

// 去掉多余的.create(),直接引入模块
var pRequest = require("promisified-request");
var fScraper = require("form-scraper");

// 再尝试获取表单结构
var formStructure = fScraper.fetchForm("#mc-embedded-subscribe-form", "http://cats.com/", pRequest);

// 后续填充并提交表单的逻辑...

方案2:改用form-scraper更适配的请求库

promisified-request的维护可能不太及时,form-scraper其实更兼容request-promise这类主流的Promise化请求库。推荐你换用这个方案,步骤如下:

首先安装依赖:

npm install request-promise request

然后修改你的代码:

const rp = require('request-promise');
const fScraper = require('form-scraper');

// 先获取目标页面的HTML,再解析表单
rp('http://cats.com/')
  .then(pageHtml => {
    // 直接传入HTML字符串解析表单结构
    const formStructure = fScraper.fetchForm("#mc-embedded-subscribe-form", pageHtml);
    
    // 填充表单数据并提交
    return fScraper.submitForm(formStructure, {
      // 这里放你的表单数据,比如 email: 'your@email.com'
      ...loginDetails
    }, rp);
  })
  .then(submitResponse => {
    console.log('表单提交成功,返回内容:', submitResponse);
  })
  .catch(error => {
    console.error('操作出错:', error);
  });

方案3:验证并更换promisified-request版本

如果你一定要用promisified-request,先确认你的实例是否真的有get方法:

var pRequest = require("promisified-request").create();
console.log(pRequest.get); // 如果输出undefined,说明当前版本的API和你预期的不一样

这种情况下,你可以尝试安装一个较稳定的旧版本:

npm install promisified-request@1.0.1

安装完成后再重新运行你的代码,应该能解决方法不存在的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:32:21