javascript - Puppeteer 脚本卡住

标签 javascript puppeteer

我正在编写一个脚本来查看注册商的域。我设法让它工作,但由于某种原因,脚本随机停止(在搜索 2、4、10 个域之后),我不知道为什么或如何调试它。 我正在使用 Puppeteer,但我对此非常陌生,所以我可能犯了一些基本错误。

目前的脚本如下:

const puppeteer = require('puppeteer');
const DOMS = require('./dominios');

//Traemos los selectores de nic.ar

const SELECTOR_BUSQUEDA = '#edit-txtbuscar';
const SELECTOR_BOTON = '#btn-consultar-block-submit';
const SELECTOR_DNS = '#body > div.dialog-off-canvas-main-canvas > div.main-container.container.js-quickedit-main-content > div > section > div > div > div:nth-child(6) > table.tablaRespon3 > tbody > tr:nth-child(1) > td:nth-child(1)';

//Generamos las variables de busqueda

//Funcion principal

async function run() {
  const browser = await puppeteer.launch({
    args: ['--no-sandbox', '--disable-setuid-sandbox', 'headless:false']
  });
  let array_doms = [];
  let respuesta = "";
  array_doms = DOMS.Dominios;
  let bodyHandle;
  let resultado;
  const page = await browser.newPage();
  for (let i = 0; i < array_doms.length; i++) {
    await page.goto('https://nic.ar');
    await page.click(SELECTOR_BUSQUEDA);
    await page.keyboard.type(array_doms[i]);
    await page.click(SELECTOR_BOTON);
    await page.waitForNavigation();
    //Trae el selector de la tabla de resultados de la busqueda
    bodyHandle = await page.$('body > div.dialog-off-canvas-main-canvas > div.main-container.container.js-quickedit-main-content > div > section > div > div > div:nth-child(6) > table.tablaRespon3 > tbody > tr:nth-child(1) > td:nth-child(1)');
    resultado = await page.evaluate(body => body.innerHTML, bodyHandle);
    await bodyHandle.dispose();
    respuesta = "El dominio " + array_doms[i] + " apunta a " + resultado;
    console.log(respuesta);
  }
};

run();
~

我知道代码看起来很糟糕,但我仍在学习。

最佳答案

这两行可能存在竞争条件:

await page.click(SELECTOR_BOTON);
await page.waitForNavigation();

有时导航发生在页面点击解决之前,有时发生在这之后。为避免这种影响,请尝试将这些行替换为以下行:

await Promise.all([
  page.click(SELECTOR_BOTON),
  page.waitForNavigation(),
]);

关于javascript - Puppeteer 脚本卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54486012/

相关文章:

javascript - 如何从 BigInt 计算百分比?

node.js - Puppeteer 下拉菜单不是选择类型

javascript - Puppeteer:有什么方法可以获取 page.on() 的所有事件监听器吗?

javascript - jQuery eq() 选择器不工作

javascript - 如何实现定时渐变效果?

javascript - 为什么我的 JavaScript 代码没有按预期运行?

node.js - 在 Node.js 中更改 JPEG 文件 DPI header

javascript - 将变量传递给箭头函数

node.js - 使用 Puppeteer 禁用生成的 PDF 中的超链接

javascript - 如何使用 JavaScript 更改 CSS 属性