Web scraping 如何知道在Puppeter中提交的表单是否没有错误

Web scraping 如何知道在Puppeter中提交的表单是否没有错误,web-scraping,puppeteer,Web Scraping,Puppeteer,我正在尝试提交一个表单,我正在测试由于无效输入导致表单无法提交的情况。如果我输入的邮政编码有效,那么此行代码将返回null,因为没有错误消息 await self.page.waitForFunction( 'document.querySelector("#adr-zip-error")' ); 但是,我必须在此之前硬编码延迟,或者设置某种超时来捕获此错误消息。 我还试着用同样的方法检查表单本身是否为空,但同样,只有在经过一段时间后检查表单时,它才起作用,因为表单提交需要时间 有

我正在尝试提交一个表单,我正在测试由于无效输入导致表单无法提交的情况。如果我输入的邮政编码有效,那么此行代码将返回null,因为没有错误消息

await self.page.waitForFunction(
    'document.querySelector("#adr-zip-error")'
  );
但是,我必须在此之前硬编码延迟,或者设置某种超时来捕获此错误消息。 我还试着用同样的方法检查表单本身是否为空,但同样,只有在经过一段时间后检查表单时,它才起作用,因为表单提交需要时间


有没有一种方法可以在不使用硬编码延迟的情况下判断表单是否成功提交

这不是一个通用的解决方案,是针对这个问题量身定做的。你可以用

const response=wait page.waitForResponse(response=>response.url().startsWith(“https://app.shipt.com/api/v1/customer_addresses"));
if(response.ok())
//成功
或者,您可以只检查输入有效性:

const invalid=wait page.evaluate(()=>document.querySelector(“#adr zip”).getAttribute('aria-invalid')==“true”);

提交后,您可以执行以下操作:

await Promise.race([
  page.waitFor('#adr-zip-error'),
  page.waitForNavigation()
])
然后

let error = await page.$('#adr-zip-error')

将让您知道错误是否首先发生

没有通用方法,因为并非每个表单提交都必须生成导航请求。例如,多步骤表单。是针对某个特定站点的吗?如果是,你能举个例子吗?网站是shipt.com,但你需要登录才能看到上面的编辑地址选项,这就是我遇到这个问题的地方。此表单不生成导航请求。如果表单没有导航到其他地方,是否没有其他方法检查表单上的响应?第一种方法工作得很好。出于某种原因,无论表单提交是否正确,第二个值的计算结果都为true。请问您是如何获得用于回复的正确url的?你刚刚在开发工具的网络标签中找到了它吗?@BillTaha是的,测试了几次以找出模式