Как пройти заполнение формы с помощью веб-царапин? - PullRequest
0 голосов
/ 22 апреля 2019

Как пройти через форму входа на веб-сайт и увидеть 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 Ответ

0 голосов
/ 22 апреля 2019

Проблема в том, что cheerio не может следовать за новым URL.

В вашем конкретном случае есть два возможных решения:
1. Войдите на сайт с помощью браузера, получите доступ к файлам cookie через разработчикаинструменты и скопируйте их в свой request.Примерно так: документация .
2. Используйте автоматический безголовый браузер, который может следить за перенаправлением страницы.И сохраняйте данные своей сессии.Например, puppeteer или selenium .

Если вы уже используете node.js, было бы проще реализовать логику с 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.
Вы можете извлечь куки через это расширение 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')
})
...