【发布时间】:2021-10-16 12:42:38
【问题描述】:
我正在一个 NodeJS 项目中使用 Puppeteer 完成一个表单。使用常规类型和单击功能一切正常。单击“提交”按钮后,会发出一个 POST 请求,该请求会将一些表单数据发送到服务器。我想在发送之前附加一个键/值。这就是我目前在 StackOverflow、Github 和 Puppeteer 文档上找到的内容。我正在拦截请求,通过传入一个 FormData 对象的新实例来添加我的键/值,该对象附加了新的键/值。
await this.page.setRequestInterception(true);
var FormData = require('form-data');
var form = new FormData();
this.page.once("request", interceptedRequest => {
console.log("Request handler triggered");
form.append('newvalue', 'some new value');
interceptedRequest.method = "POST";
interceptedRequest.postData = form;
interceptedRequest.continue();
});
await this.page.goto(urlWithForm, { waitUntil: "networkidle2" });
// Complete form...
// Click submit
await this.page.click('#submit');
我首先担心的是 - 这是正确的方法吗?我担心当最后单击#submit 按钮时,表单数据将被单击此按钮时发送的“正常”表单数据覆盖。我应该做点别的吗?可能使用 page.evaluate 并在浏览器本身中运行一些代码以在提交时以某种方式设置此键/值?
第二个是当前页面只是在调用 this.page.goto 时无限期挂起。我在日志中看到“请求处理程序已触发”,但好像 .continue() 方法没有被调用或无法正常工作。什么都没有加载。
非常感谢这里的一些指导!
【问题讨论】:
-
这是什么页面?页面发送大量请求,所以我会设置一个保护来检查请求 url 是否与您的目标匹配。
标签: javascript node.js puppeteer form-data