php - Laravel Dusk - 重用浏览器及其 session 和 cookie

标签 php laravel laravel-dusk

我刚刚使用 Laravel Dusk 测试了一个 javascript 站点。

出于某种原因想要重用当前浏览器及其 session 和 cookie(让我保持在站点上的登录状态),所以我不需要通过身份验证过程。

有什么办法可以重用当前的浏览器?

我已经搜索过这个,但我没有找到实用的信息/示例。
注意:我默认使用 Dusk 和 Google Chrome 和一个独立的 ChromeDriver(不是 Selenium)

最佳答案

我使用 Laravel Dusk 也有同样的要求。诀窍是使用 Facebook/WebDriver/Remote/RemoteWebDriver 类及其 manage() method .

伪代码:

use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Cookie;
use Facebook\WebDriver\WebDriverOptions;
use Laravel\Dusk\Browser;
use Laravel\Dusk\Chrome\ChromeProcess;

//the cookie file name
$cookie_file = 'cookies.txt';

//create the driver
$process = (new ChromeProcess)->toProcess();
$process->start();
$options = (new ChromeOptions)->addArguments(['--disable-gpu','--enable-file-cookies','--no-sandbox']);
$capabilities = DesiredCapabilities::chrome()->setCapability(ChromeOptions::CAPABILITY, $options);
$driver = retry(5, function () use($capabilities) {
    return RemoteWebDriver::create('http://localhost:9515', $capabilities);
}, 50); 

//start the browser
$browser = new Browser($driver);
$browser->visit('https://tehwebsite.com/login');

//Cookie management - if there's a stored cookie file, load the contents         
if (file_exists($cookie_file)) {
    //Get cookies from storage
    $cookies = unserialize(file_get_contents($cookie_file));
    //Add each cookie to this session
    foreach ($cookies as $key => $cookie) {
        $driver->manage()->addCookie($cookie);
    }
}

//if no cookies in storage, do the browser tasks that will create them, eg by logging in 
$browser
    ->type('email', 'login@email.com')
    ->type('password', 'sdfsdfsdf')
    ->check('rememberMe')
    ->click('#login');

//now the cookies have been set, get and store them for future runs
if (!file_exists($cookie_file)) {
    $cookies = $driver->manage()->getCookies();
    file_put_contents($cookie_file, serialize($cookies));
}

关于php - Laravel Dusk - 重用浏览器及其 session 和 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51111092/

相关文章:

PHP mt_rand 每次都返回相同的数字

php - 将数值一插入表列中,而不是姓名、电子邮件和位置

javascript - 返回所有用户、每个用户的帖子以及每个带有评论的帖子 laravel

php - Laravel 任意将退出状态码设置为自定义命令

laravel - Laravel Dusk 测试结果可以记录吗?

PHP 模块已加载警告

php - 为什么这个 PHP 脚本不能在 MySQL 数据库中插入表单数据?

php - 带有数据透视表的 Laravel 查询生成器

laravel - 带有测试数据库的 PhpStorm Laravel Dusk

Laravel dusk 在 textarea 中看不到文本