問題

私はレジストラのドメインを見るためのスクリプトを書いています。私はそれを動作させることができましたが、何らかの理由でスクリプトがランダムな時間(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();
~
 

私はコードが厄介に見えることを知っていますが、私はまだ学んでいます。

  ベストアンサー

これらの2行には競合状態があるかもしれません:

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

場合によっては、ページが解決される前にナビゲーションが発生することがあります。この効果を避けるために、これらの行を次の行に置き換えてみてください。

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

  同じタグがついた質問を見る

javascriptpuppeteer