PhantomJs: как остановить перенаправление на другой URL-адрес и загрузить исходный URL-адрес

Я пытался загрузить этот URL-адрес с сайта forbes.com, используя PhantomJs

'http://www.forbes.com/sites/prossermarc/2016/10/14/softbanks-new-100b-tech-fund-shows-exactly-how-its-expanding-beyond-telco/#6e5027484acb'

Но это перенаправляется, http://www.forbes.com/forbes/welcome/ поэтому я не могу захватить заголовок страницы, который я хочу.

Я попробовал прерывать запрос, если перенаправляющий URL-адрес, http://www.forbes.com/forbes/welcome/но который полностью останавливает загрузку страницы и phantomjsтерпит неудачу.

page.onResourceRequested = function(requestData, networkRequest) {
 if (requestData.url.split('?')[0] === 'http://www.forbes.com/forbes/welcome/') {
     networkRequest.abort();
 }
};

В любом случае я могу остановить это перенаправление и загрузить исходный URL-адрес?

javascript,phantomjs,

0

Ответов: 2


1 принят
+50

В любом случае я могу остановить это перенаправление и загрузить исходный URL-адрес?

Да, попробуйте установить другой пользовательский агент:

page.settings.userAgent = "myAppBot"; // or simply 'bot'.

Forbes не перенаправляет ботов точно, я предполагаю, что он показывает рекламу только для обычных пользовательских агентов браузера.


1

В любом случае я могу остановить это перенаправление и загрузить исходный URL-адрес?

Нет, потому что это делается на уровне сервера (перенаправление заголовка).

Но вы можете нажать кнопку «Продолжить на статью» или подождать, пока forbes.com автоматически перенаправит вас на статью через 5 секунд или около того.

Я покажу, как ждать:

var page = require('webpage').create();

page.viewportSize = { width: 1440, height: 900 };
page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36";

// This callback is run every time a page is done loading.
// The first time it is the welcome page, the second time it's the target page.    
page.onLoadFinished = function(){

    // Let's get the URL of current page
    var url = page.evaluate(function(){
        return document.location.href;
    });

    console.log(url);

    // Is it the welcome page? No
    if(url.indexOf("forbes/welcome") == -1)
    {
        setTimeout(function(){
            page.render("forbes-article.png");
            var title = page.evaluate(function(){
                return document.querySelector("h1.article-headline").innerText;
            });
            console.log(title);
            phantom.exit();
        }, 1000);
    }
    // Yes it is the welcome page, let's just wait
    else
    {
        console.log("redirected to welcome screen, waiting");
        page.render("forbes-welcome.png");
    }

};

page.open("http://www.forbes.com/sites/prossermarc/2016/10/14/softbanks-new-100b-tech-fund-shows-exactly-how-its-expanding-beyond-telco/#6e5027484acb");
JavaScript, phantomjs,
Похожие вопросы