Кукловод Войти в Instagram - PullRequest
       80

Кукловод Войти в Instagram

0 голосов
/ 24 октября 2018

Я пытаюсь войти в Instagram с помощью Puppeteer, но почему-то я не могу это сделать.

Можете ли вы помочь мне?

Вот ссылка, которую я использую:

https://www.instagram.com/accounts/login/

Я пробовал разные вещи.Последний код, который я попробовал, был таким:

const puppeteer = require('puppeteer');

(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.instagram.com/accounts/login/');
await page.evaluate();

await afterJS.type('#f29d14ae75303cc', 'username');

await afterJS.type('#f13459e80cdd114', 'password');

await page.pdf({path: 'page.pdf', format: 'A4'});

await browser.close();
})();

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вы можете войти в Instagram, используя следующий пример кода:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page    = await browser.newPage();

  // Wait until page has loaded

  await page.goto('https://www.instagram.com/accounts/login/', {
    waitUntil: 'networkidle0'
  });

  // Wait for log in form

  await Promise.all([
    page.waitForSelector('[name="username"]'),
    page.waitForSelector('[name="password"]'),
    page.waitForSelector('[name="submit"]')
  ]);

  // Enter username and password

  await page.type('[name="username"]', 'username');
  await page.type('[name="password"]', 'password');

  // Submit log in credentials and wait for navigation

  await Promise.all([
    page.click('[type="submit"]'),
    page.waitForNavigation({
      waitUntil: 'networkidle0'
    })
  ]);

  // Download PDF

  await page.pdf({
    path: 'page.pdf',
    format: 'A4'
  });

  await browser.close();
})();
0 голосов
/ 24 октября 2018

ОК, вы на правильном пути, но вам просто нужно изменить несколько вещей.

  • Во-первых, я понятия не имею, откуда берется ваша переменная afterJS?В любом случае вам это не понадобится.
  • Вы просите ввести данные в поля ввода username и password, но не просите puppeteer фактически нажать на вход в систему.кнопка для завершения процесса входа в систему.
  • page.evaluate() используется для выполнения кода JavaScript внутри контекста страницы (т. е. на веб-странице, загруженной в удаленный браузер).Поэтому вам не нужно использовать его здесь.

Я бы реорганизовал ваш код, чтобы он выглядел следующим образом:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.instagram.com/accounts/login/');
  await page.waitForSelector('input[name="username"]');
  await page.type('input[name="username"]', 'username');
  await page.type('input[name="password"]', 'password');
  await page.click('button[type="submit"]');
  // Add a wait for some selector on the home page to load to ensure the next step works correctly
  await page.pdf({path: 'page.pdf', format: 'A4'});
  await browser.close();
})();

Надеюсь, это установит вам правильный путь к получениюмимо страницы входа в систему!

Обновление 1:
Вы задали вопрос о разборе текста элемента в Instagram ... к сожалению, у меня там нет учетной записипоэтому я не могу дать вам точного решения, но, надеюсь, это все еще имеет определенную ценность.

Итак, вы пытаетесь оценить текст элементов, верно?Вы можете сделать это следующим образом:

const text = await page.$eval(cssSelector, (element) => {
  return element.textContent;
});

Все, что вам нужно сделать, это заменить cssSelector селектором элемента, из которого вы хотите получить текст.

Обновить2:
ОК, наконец, вы задали вопрос о прокрутке вниз до элемента внутри родительского элемента.Я не собираюсь красть кредит у кого-то другого, поэтому вот ответ на этот вопрос:

Как перейти к элементу внутри div?

Что вы?Мне нужно будет просто следовать инструкциям и заставить его работать с кукловодом, как показано ниже:

await page.evaluate(() => {
  const lastLink = document.querySelectorAll('h3 > a')[2];
  const topPos = lastLink.offsetTop;

  const parentDiv = document.querySelector('div[class*="eo2As"]');
  parentDiv.scrollTop = topPos;      
});

Имейте в виду, что я не тестировал этот код - я просто непосредственно следовалответ в URL, который я предоставил.Это должно работать!

...