#javascript #node.js #web-scraping #request #request-promise
#javascript #node.js #соскабливание полотна #запрос #запрос-обещание #веб-очистка
Вопрос:
Как пройти через форму входа на веб-сайт и увидеть HTML-код любых связанных веб-страниц на веб-сайте.
Я пытаюсь пройти через форму входа на веб-сайт, а затем проанализировать html-страницу, где хранится информация о моей учетной записи, но я не могу этого сделать. Вот мой код.
const express = require('express');
const fs = require('fs'); //access to file system
const request = require('request');
const cheerio = require('cheerio');
const rp = require('request-promise');
const app = express();
let url = 'url';
(request.post({url:'url1', form: {
email:'email',
password:'password'
}},
function(error, response, html){
if(error){
console.log(error);
}
else{
console.log(html);
}
}))
app.get('/scrape', function(req, res){
requestToWork(url);
res.send('Check your console!')
})
function requestToWork(url){
return rp(url)
.then(HTMLresponse=>{
const $ = cheerio.load(HTMLresponse);
console.log($.text());
$('.ellipsis').each((i, element) => {
console.log(element);
});
})
}
app.listen('8080')
console.log('Listening port 8080');
exports = module.exports = app;
Он просто отправляет мне HTML-код со страницы ВХОДА. Я хочу зарегистрировать другую страницу.
Ответ №1:
Проблема в том, cheerio
что я не могу перейти по новому URL.
В вашем конкретном случае есть два возможных решения:
1. Войдите на сайт с помощью своего браузера, получите доступ к файлам cookie с помощью инструментов разработчика и скопируйте их на свой request
. Что-то вроде этого из документации.
2. Используйте автоматический безголовый браузер, который может следить за перенаправлением страницы. И сохраните данные вашего сеанса. Как puppeteer или selenium.
Если вы уже используете node.js было бы проще реализовать логику с помощью puppeteer.
Здесь больше информации о puppeteer.
Обновить
Кукловод:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
// Now you have two ways
// First one with evaluate, to access page DOM
await page.evaluate(() => {
// Here you have access to DOM. So you can make any JS DOM operations, you wish.
const form = document.querySelector('form');
const email = document.querySelector('email');
// ...some actions
form.submit();
})
// The second one, with puppeteer helper functions
const email = await page.$('email');
// Type function will type text in input
await elementHandle.type('some text');
// press function will emulate enter button press.
await elementHandle.press('Enter');
await page.waitFor(1500);
// Here you have result of your auth procedure.
// After all your operations, just close the browser.
await browser.close();
})();
Здесь речь идет о типе кукловода
Если мы ищем request
реализацию.
Сначала мы должны получить файл cookie.
Вы можете извлечь файлы cookie с помощью этого расширения Chrome или перейти на Network
вкладку инструменты разработки, нажать на первую запись и найти Cookie
заголовок в Request Headers
разделе.
Просто скопируйте его
, а затем в коде, который вы выполняете request
вот так из официальной документации:
const j = request.jar();
// Here 'key1=value1' change with your cookie from browser
const cookie = request.cookie('key1=value1');
const url = 'http://www.google.com';
j.setCookie(cookie, url);
request({url: url, jar: j}, function () {
request('http://images.google.com')
})
Комментарии:
1. Можете ли вы привести мне какой-нибудь простой пример, например, ссылку на репозиторий github?
2. @VladSymonenko для какого решения? используя файлы cookie или
puppeteer
?3. Оба из них, если сможете.