#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
вы могли бы проверить, включает ли заголовок документа ‘Войти или зарегистрироваться’