PHPackages                             windbridges/browser-server-client - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. windbridges/browser-server-client

ActiveLibrary[API Development](/categories/api)

windbridges/browser-server-client
=================================

Browser Server API Client

026PHP

Since Mar 7Pushed 5y ago1 watchersCompare

[ Source](https://github.com/WindBridges/browser-server-client)[ Packagist](https://packagist.org/packages/windbridges/browser-server-client)[ RSS](/packages/windbridges-browser-server-client/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependenciesVersions (1)Used By (0)

### PHP API

[](#php-api)

Создаем объект API и авторизуемся на сервисе:

```
use WindBridges\BrowserServerClient\BrowserServerClient;

$api = new BrowserServerClient('172.31.192.1');
$api->auth('AUTH_TOKEN');
```

Вызов startSession() приводит к открытию нового окна браузера и возвращает данные сессии, соответствующие новому окну:

```
$session = $api->startSession();
```

Используя socketUri сессии, можно подключиться к окну браузера с помощью любой библиотеки, понимающей DevTools protocol. Здесь мы будем использовать `headless-chromium-php`:

```
use HeadlessChromium\BrowserFactory;
$browser = BrowserFactory::connectToBrowser($session->getSocketUri());
$page = $browser->createPage();
```

Полный пример:

```
use WindBridges\BrowserServerClient\BrowserServerClient;
use HeadlessChromium\BrowserFactory;

$api = new BrowserServerClient('172.31.192.1');
$api->auth('AUTH_TOKEN');
$session = $api->startSession();
$browser = BrowserFactory::connectToBrowser($session->getSocketUri());
$page = $browser->createPage();
```

Иногда бывает гораздо удобнее дать сессии имя и обращаться к ней по нему, чтобы не хранить идентификаторы сессий, которые назначаются случайным образом. При запросе сессии по имени, сервис будет проверять, открыта ли данная сессия, и если нет, то автоматически создавать ее:

```
use WindBridges\BrowserServerClient\BrowserServerClient;
use HeadlessChromium\BrowserFactory;

$api = new BrowserServerClient('172.31.192.1');
$api->auth('AUTH_TOKEN');
// Если сессия с именем 'test-session' не существует, то она будет создана
$session = $api->requireSession('test-session');
$browser = BrowserFactory::connectToBrowser($session->getSocketUri());
$page = $browser->createPage();
```

Эту же тактику можно использовать и для страниц браузера. Например, если вам нужна одна вкладка для работы, то можно назначить ей уникальное имя, чтобы не следить за закрытием ненужных вкладок в процессе запуска скрипта:

```
use WindBridges\BrowserServerClient\BrowserServerClient;

$api = new BrowserServerClient('172.31.192.1');
$api->auth('AUTH_TOKEN');
// Если сессия с именем 'test-session' не существует, то она будет создана
$session = $api->requireSession('test-session');
$sessionPage = $session->requirePage('test-page');
```

`$sessionPage->getSocketUri()` будет каждый раз содержать uri одной и той же страницы. Однако `headless-chromium-php` не позволяет напрямую подключиться к открытой вкладке, поэтому нужно использовать workaround. В будущем для этой цели будет создан хелпер, позволяющий выполнять эти действия в несколько строк.

Workaround для подключения к существующей странице:

```
use WindBridges\BrowserServerClient\BrowserServerClient;
use HeadlessChromium\BrowserFactory;
use HeadlessChromium\Communication\Message;
use HeadlessChromium\Page;

$api = new BrowserServerClient('172.31.192.1');
$api->auth('AUTH_TOKEN');
// Если сессия с именем 'test-session' не существует, то она будет создана
$session = $api->requireSession('test-session');
$sessionPage = $session->requirePage('test-page');
$browser = BrowserFactory::connectToBrowser($session->getSocketUri());
$target = $browser->getTarget($sessionPage->getTargetId());
$frameTreeResponse = $target->getSession()->sendMessageSync(new Message('Page.getFrameTree'));

if (!$frameTreeResponse->isSuccessful()) {
    throw new Exception('Cannot read frame tree');
}

$page = new Page($target, $frameTreeResponse['result']['frameTree']);
$page->getSession()->sendMessageSync(new Message('Page.enable'));
$page->getSession()->sendMessageSync(new Message('Network.enable'));
$page->getSession()->sendMessageSync(new Message('Runtime.enable'));
$page->getSession()->sendMessageSync(new Message('Page.setLifecycleEventsEnabled', ['enabled' => true]));
// $page->addPreScript($pagePreScript);
```

###  Health Score

17

—

LowBetter than 6% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity30

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/76b2198d24cb359e2ea96d2ac9cf6df318bcbd4f7b30a923dc7335aff2e4739b?d=identicon)[windbridges](/maintainers/windbridges)

---

Top Contributors

[![windbridges](https://avatars.githubusercontent.com/u/2224029?v=4)](https://github.com/windbridges "windbridges (11 commits)")

### Embed Badge

![Health badge](/badges/windbridges-browser-server-client/health.svg)

```
[![Health](https://phpackages.com/badges/windbridges-browser-server-client/health.svg)](https://phpackages.com/packages/windbridges-browser-server-client)
```

###  Alternatives

[stripe/stripe-php

Stripe PHP Library

4.0k143.3M480](/packages/stripe-stripe-php)[twilio/sdk

A PHP wrapper for Twilio's API

1.6k92.9M272](/packages/twilio-sdk)[knplabs/github-api

GitHub API v3 client

2.2k15.8M187](/packages/knplabs-github-api)[facebook/php-business-sdk

PHP SDK for Facebook Business

90121.9M34](/packages/facebook-php-business-sdk)[meilisearch/meilisearch-php

PHP wrapper for the Meilisearch API

73813.7M114](/packages/meilisearch-meilisearch-php)[google/gax

Google API Core for PHP

263103.1M454](/packages/google-gax)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
