我使用的是puphpeteer,它是一个PHP桥,用于支持整个API的node的puppeteer。我将抓取不同的Facebook页面寻找一些信息,为此,我必须登录与我的凭证,然后转到目标Facebook页面。
我的目标是只登录一次,然后,一旦登录,使用Facebook会话/登录cookies来为后续的URL保留我的会话。据我所知,这是可以做到的,但我还没有找到任何关于如何使用PHP Puphpeteer来做到这一点的例子。
下面是我的代码:
use Nesk\Puphpeteer\Puppeteer;
use Nesk\Rialto\Data\JsFunction;
use Nesk\Puphpeteer\Resources\ElementHandle;
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);
}
}发布于 2020-09-18 09:28:26
根据Johann Pardanaud的说法,该接口与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
您可以检查文档标题是否包含“登录或注册”
https://stackoverflow.com/questions/63906406
复制相似问题