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
相关产品推荐
相关产品推荐

