首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PHP puphpeteer保持facebook登录会话

使用PHP puphpeteer保持facebook登录会话
EN

Stack Overflow用户
提问于 2020-09-16 00:46:00
回答 1查看 552关注 0票数 0

我使用的是puphpeteer,它是一个PHP桥,用于支持整个API的node的puppeteer。我将抓取不同的Facebook页面寻找一些信息,为此,我必须登录与我的凭证,然后转到目标Facebook页面。

我的目标是只登录一次,然后,一旦登录,使用Facebook会话/登录cookies来为后续的URL保留我的会话。据我所知,这是可以做到的,但我还没有找到任何关于如何使用PHP Puphpeteer来做到这一点的例子。

下面是我的代码:

代码语言:javascript
复制
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);
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2020-09-18 09:28:26

根据Johann Pardanaud的说法,该接口与Puppeteer相同,您仍然可以将选项传递给Puppeteer::launch()方法:

因此,为了将会话cookie持久化到本地存储中,您可以在js中传递选项它是

代码语言:javascript
复制
browser = await puppeteer.launch({
  headless: true,
  userDataDir: "../sessionData",
  args: ["--no-sandbox", "--start-maximized"],
})

在php中

代码语言:javascript
复制
$browser = $puppeteer->launch([ 'headless' => false, 'userDataDir' => '../sessionData', 'slowMo' => 250 ]);

其中,在本例中,'../sessionData'是要存储会话数据的目录

当您登录并关闭puppeteer时,您的会话将持续检查您是否已登录。您可以检查文档标题

当您没有登录文档标题是"Facebook -登录或注册“当您登录文档标题是"(2) Facebook" //通知和名称Facebook

您可以检查文档标题是否包含“登录或注册”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63906406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档