Получение 403 Запрещено при переходе по URL с PhantomJS - PullRequest
0 голосов
/ 20 декабря 2018

Если я перехожу на следующую веб-страницу в Chrome, она нормально загружается: https://www.cruisemapper.com/?poi=39

Однако, когда я запускаю следующий скрипт PhantomJS, который просто переходит на тот же URL-адрес и выводит всю строку DOMна консоль я получаю сообщение 403 Forbidden:

var page = require('webpage').create(),
    url = 'https://www.cruisemapper.com/?poi=39';

page.open(url, function (status) {
    if (status === 'success') {
        console.log(page.evaluate(function () {
            return document.documentElement.outerHTML;
        }));

        phantom.exit();
    }
});

Вот точный вывод на консоль:

<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.<br>
</p>

</body></html>

Я думал, что если я добавлю какую-то строку пользовательского агента,это может сработать.Таким образом, я добавил следующую строку над строкой console.log:

page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36';

Но это не сработало.Тогда я попробовал следующее:

page.customHeaders = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
};

Но это тоже не сработало.У кого-нибудь есть какие-либо советы о том, как я могу найти указанный выше URL-адрес и не получить сообщение 403 Forbidden?Спасибо.

1 Ответ

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

Ваш код работает для меня нормально (хотя я предлагаю эмуляцию размера области просмотра, см. Код).Если вы по-прежнему получаете 403, попробуйте изменить свой IP-адрес, возможно, сайт сейчас вам доступен (возможно, вы посещали эту страницу много раз).

var page = require('webpage').create(),
    url = 'https://www.cruisemapper.com/?poi=39';

page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36';

page.viewportSize = { width: 1440, height: 900 }; // <-- otherwise it's 400x300 by default

// It's good to watch for errors on the page
page.onError = function (msg, trace) 
{
    console.log(msg);
    trace.forEach(function(item) {
        console.log(' ', item.file, ':', item.line);
    })
}

page.open(url, function (status) {

    console.log(status);
    page.render("page.png"); // Also useful to check if you get what you expect

    if (status === 'success') {
        console.log(page.evaluate(function () {
            return document.documentElement.outerHTML;
        }));

        phantom.exit();
    }
});
...