【发布时间】:2021-02-03 03:20:47
【问题描述】:
我需要用 puppeteer 刮一张桌子以获取所有单元格(行和单元格)。
表格是:
<table class="grilla" cellspacing="0" rules="all" border="1" id="ctl00_PlaceContent_gvConceptos" style="width:100%;border-collapse:collapse;">
<tr class="grilla_head" align="center">
<th scope="col">Concepto</th><th scope="col">Empresa</th><th scope="col">Descripción</th><th scope="col">Haberes</th><th scope="col">Deducciones</th>
</tr><tr class="grilla_item separador">
<td align="center" style="font-size:10pt;">001</td><td align="center" style="font-size:10pt;">001</td><td style="font-size:10pt;">P.B.U - PRESTACION BASICA UNIVERSAL</td><td align="right" style="font-size:10pt;">8144,14</td><td align="right" style="font-size:10pt;"></td>
</tr>
</table>
我设法使用此代码从框架中的表格中获取 html:
// Get the username and password inputs
const browser = await Apify.launchPuppeteer();
const page = await browser.newPage();
await page.goto("https://servicioscorp.anses.gob.ar/MiAnsesSitio/Sistemas/InvocaSistemas.aspx?IdMenu=10603");
// Login
await page.type('#Usuario', "user");
await page.type('#Clave',"key");
let n,x;
for (n=0 ; n <= 3000 ; n++) { console.log(n) }
await page.click('#Ingresar');
await page.waitForNavigation()
await page.click('#ctl00_MenuIzquierdo_rpt_MenuPadre_ctl05_lnk_Padre')
await page.click('#ctl00_MenuIzquierdo_rpt_MenuPadre_ctl05_rpt_MenuHijos_ctl02_lnk')
await page.waitForNavigation()
const frame = await page.frames().find(frame => frame.name() === 'ctl00_PlaceContent_icontenedor');
await frame.waitForSelector('#ctl00_PlaceContent_txtMes')
await frame.type('#ctl00_PlaceContent_txtMes','01');
await frame.type("#ctl00_PlaceContent_txtAnio","2021");
await frame.click("#ctl00_PlaceContent_btnConsultar");
await frame.waitForNavigation()
await frame.waitForSelector('#ctl00_PlaceContent_tlb_General_Grilla')
let element = await frame.$('#ctl00_PlaceContent_tlb_General_Grilla')
// Get inner text
const innerText = await frame.evaluate(() => document.querySelector('#ctl00_PlaceContent_tlb_General_Grilla').innerText);
// Get inner HTML
const innerHTML = await frame.evaluate(() => document.querySelector('#ctl00_PlaceContent_tlb_General_Grilla').innerHTML);
console.log(innerHTML)
console.log('Done.');
提前致谢
【问题讨论】:
-
这里发生了很多事情。如果您能准确指出代码的哪一部分对您来说出了问题,那将会很有帮助。你到底希望得到什么输出?
标签: node.js web-scraping puppeteer