PhantomJS для захвата содержимого следующей страницы после нажатия кнопки - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь перехватить содержимое второй страницы после клика.Но это возвращает содержание первой страницы.

const status = await page.open('https://www.dubailand.gov.ae/English/services/Eservices/Pages/Brokers.aspx');
console.log(status);
await page.evaluate(function() {
    document.querySelector('#ctl00_ctl42_g_26779dcd_6f3a_42ae_903c_59dea61690e9_dpPager > a.NextPageLink').click();
})

const content = await page.property('content');
console.log(content);

Я выполнил аналогичную задачу, используя кукловода, но перешел к фантомам из-за проблем с развертыванием кукловода.любая помощь приветствуется.

1 Ответ

0 голосов
/ 20 декабря 2018

Вы получаете первую страницу, потому что запрашиваете содержимое страницы сразу после нажатия кнопки «Далее», но вам нужно дождаться завершения запроса Ajax.Это можно сделать, наблюдая за загрузчиком ajax "tree palm" : когда он не виден, результаты находятся в.

// Utility function to pass time: await timeout(ms)
const timeout = ms => new Promise(resolve => setTimeout(resolve, ms));

// emulate a realistic client's screen size
await page.property('viewportSize', { width: 1280, height: 720 });

const status = await page.open('https://www.dubailand.gov.ae/English/services/Eservices/Pages/Brokers.aspx');

await page.evaluate(function() {
    document.querySelector('#ctl00_ctl42_g_26779dcd_6f3a_42ae_903c_59dea61690e9_dpPager > a.NextPageLink').click();
});

// Give it time to start request
await timeout(1000);

// Wait until the loader is gone
while(1 == await page.evaluate(function(){ 
    return jQuery(".Loader_large:visible").length 
}))
{
    await timeout(1000);
    console.log(".");
}

// Now for scraping
let contacts = await page.evaluate(function(){

    var contacts = []; 
    jQuery("#tbBrokers tr").each(function(i, row){
        contacts.push({"title" : jQuery(row).find("td:nth-child(2)").text().trim(), "phone" : jQuery(row).find("td:nth-child(4)").text().trim() })
    })

    return contacts;
});

console.log(contacts);

results

...