Поддерживайте сеанс входа в Facebook с помощью PHP puphpeteer

#javascript #php #laravel #vue.js

#javascript #php #laravel #vue.js

Вопрос:

Я использую puphpeteer, который является PHP-мостом для puppeteer узла, поддерживающим весь API. Я буду просматривать разные страницы Facebook в поисках некоторой информации, для этого мне нужно войти в систему с моими учетными данными, а затем перейти на целевую страницу Facebook.

Моя цель — ВОЙТИ в систему ТОЛЬКО ОДИН раз, а затем, после входа в систему, использовать Facebook session / log in cookies, чтобы сохранить мой сеанс для последующих URL-адресов. Насколько я знаю, это было бы возможно сделать, но я не нашел никаких примеров того, как это сделать с помощью PHP Puphpeteer.

Вот мой код:

 use NeskPuphpeteerPuppeteer;
use NeskRialtoDataJsFunction;
use NeskPuphpeteerResourcesElementHandle;


public function scrapeFacebookForBirthdays()
    {
        $cookies = null;

        $puppeteer = new Puppeteer();
        $browser = $puppeteer->launch([ 'headless' => false, 'slowMo' => 250 ]);
        $browser->setUserAgent('Opera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.17');

        $page = $browser->newPage();

        
        //Check if cookies are set or not, if not set it means we have to log in ONCE, but HOW to cjeck for cookies, where to save them?
        if (!$cookies)
        {
            $page->goto("https://www.facebook.com/login", [ 'waitUntil' => "networkidle2" ]);
            $page->type("#email", $username, [ 'delay' => 30 ]);
            $page->type("#pass", $password, [ 'delay' => 30 ]);
            $page->click("#loginbutton");

            sleep(5);

            $page->waitForNavigation([ 'waitUntil' => "networkidle0" ]);

            try 
            {
                echo "success login";
                $page->waitFor('[data-click="profile_icon"]');
            }
            catch (Exception $e)
            {
                echo "failed to login";
                $browser->close();
            }

            //Where to save cookies for next url scrape??
            $cookies = $page->cookies();
        }
        else
        {
            //User Already Logged In
            $page->setCookie($cookies);
        }
    }
  

Ответ №1:

Согласно Иоганну Пардано , API такой же, как у Puppeteer, вы все равно можете передавать параметры методу Puppeteer::launch():

итак, чтобы сохранить ваши сеансовые файлы cookie в локальном хранилище, вы могли бы передать опцию в js, это

 browser = await puppeteer.launch({
  headless: true,
  userDataDir: "../sessionData",
  args: ["--no-sandbox", "--start-maximized"],
})
  

в php

 $browser = $puppeteer->launch([ 'headless' => false, 'userDataDir' => '../sessionData', 'slowMo' => 250 ]);
  

где ‘../SessionData’ — это каталог, в котором вы хотите сохранить данные сеанса в этом случае

когда вы входите в систему и закрываете puppeteer, ваш сеанс будет сохраняться, чтобы проверить, вошли вы в систему или нет, вы можете проверить заголовок документа

когда вы не вошли в систему, заголовок документа — «Facebook — Войдите или зарегистрируйтесь», когда вы вошли в систему, заголовок документа — «(2) Facebook» //уведомления Facebook

вы могли бы проверить, включает ли заголовок документа ‘Войти или зарегистрироваться’