I'm writing a script to look domains in a registrar. I managed to get it working, but for some reason the script stops at a random time (after searching 2, 4, 10 domains) and I have no idea why or how I can debug it. I'm using Puppeteer, but I'm very very new to this, so perhaps I'm making some basic mistakes.
The script so far is as follows:
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();
~
I know that the code looks nasty but I'm still learning.
There may be a race condition in these two lines:
await page.click(SELECTOR_BOTON);
await page.waitForNavigation();
Sometimes navigation happens before page click resolved, sometimes after this. To avoid this effect, try to replace these lines with these ones:
await Promise.all([
page.click(SELECTOR_BOTON),
page.waitForNavigation(),
]);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With