Подтвердить что ты не робот

Как очистить сайты, требующие аутентификации, с помощью node.js?

Я столкнулся со многими учебниками, объясняющими, как очищать общедоступные веб-сайты, которые не требуют аутентификации/входа в систему, используя node.js.

Может кто-нибудь объяснить, как очистить сайты, требующие входа в систему, используя node.js?

4b9b3361

Ответ 1

Используйте Mikeal Request, вам нужно включить поддержку файлов cookie следующим образом:

var request = request.defaults({jar: true})

Итак, сначала нужно создать имя пользователя на этом сайте (вручную) и передать имя пользователя и пароль в качестве параметров при выполнении запроса POST на этот сайт. После этого сервер ответит куки файлом, который будет запоминаться в запросе, поэтому вы сможете получить доступ к страницам, которые требуют, чтобы вы вошли в этот сайт.

Примечание. Этот подход не работает, если на странице входа используется что-то вроде reCaptcha.

Ответ 2

Или используя суперагент:

var superagent = require('superagent')
var agent = superagent.agent();

agent - это постоянный браузер, который будет обрабатывать получение и установку файлов cookie, рефереров и т.д. Просто agent.get, agent.post() как обычно.

Ответ 3

Я работаю с NodeJs Scrapers уже более 2 лет

Я могу вам сказать, что лучший выбор при работе с логинами и аутентификацией - НЕ использовать прямой запрос

Это потому, что вы просто тратите время на создание запросов вручную, и это намного медленнее,

Вместо этого используйте высокоуровневый браузер, которым вы управляете через такой API, как Puppeteer или NightmareJs

У меня есть хороший стартер и подробное руководство о том, как начать чистку с Puppeteer, я уверен, что это поможет!

Ответ 4

Вы можете собирать данные с сайтов, требующих аутентификации, таких как токен csrf.

Использование куки для каждого запроса, как это:

var j = request.jar(); // this is to set the jar of request for session and cookie persistence

request = request.defaults({ jar: j }); //here we are setting the default cookies of request

Вот небольшой код для дальнейшей разработки:

var express = require('express');
var bodyParser = require('body-parser');
var querystring = require('querystring');
var request = require('request'); //npm request package to send a get and post request to a url
const cheerio = require('cheerio'); //npm package used for scraping content from third party sites
var cookieParser = require('cookie-parser')
var http = require('http');
var app = express();
app.use(cookieParser());

var _csrf; //variable to store the _csrf value to be used later

app.use(bodyParser.json());
var html = '';

var j = request.jar(); // this is to set the jar of request for session and cookie persistence
request = request.defaults({ jar: j }); //here we are setting the default cookies of request


//___________________API CALL TO VERIFY THE GMS NUMBER_______________________
app.get('/check', function(req, response) {

    var schemeId = null;
    if (req.query.schemeId) {
        schemeId = req.query.schemeId;
        console.log(schemeId);

    } else {
        response.send('false');
        response.end();
    }
    getCsrfValue(function(err, res) {
        if (!err) {
            _csrf = res;
            console.log(_csrf);

            request.post({
                headers: {
                    'Authorization': '',
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                uri: 'https://www.xyz.site',

                body: "schemeId=" + schemeId + "&_csrf=" + _csrf

            }, function(err, res, body) {
                if (err) {
                    console.log(err);
                } else {
                    console.log("body of post: " + res.body);

                    const $ = cheerio.load(body.toString());
                    var txt = $('.schemeCheckResult').text();

                    console.log(txt);
                    if (txt) {
                        response.send('true');
                    } else {

                        response.send('false');
                    }
                    html += body;
                }
            });

        } else {
            response.send(err);
        }

    })


});

//______________FUNCTION TO SCRAPE THE CSRF TOKEN FROM THE SITE____________
function getCsrfValue(callback) {
    request.get({
        headers: {
            'Authorization': '',
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        uri: 'https://www.xyz.site'

    }, function(err, res, body) {
        if (err) {
            return callback(err);
        } else {
            const $ = cheerio.load(body.toString());
            var txt = $('input[name=_csrf]').val();
            _csrf = txt;

            return callback(null, _csrf);
        }
    });

}

module.exports = app;