Подключение к браузеру
Введение
Для выполнения действий в браузере посредством написанного на каком-либо языке программирования кода, вам необходимо использовать сторонние библиотеки, такие как Puppeteer, Playwright, Selenium и др.
Важно отметить, что на данный момент, подключиться с целью автоматизации можно только к тем профилям, которые были запущены через API.
Прочитать о том, как запускать и останавливать профили посредством API вы можете в соответствующей документации.
Запуск и остановка профилей
Методы запуска и остановки профилей посредством API
В данном документе вы сможете найти документацию по подключению к профилю через одну из вышеуказанных библиотек с использованием нескольких языков программирования.
Puppeteer
Общая информация
Puppeteer это библиотека Node.js, которая позволяет автоматизировать процессы в Chromium-based браузере при помощи Chrome DevTools Protocol.
Иными словами, вы можете автоматизировать свои действия в браузерном профиле: открытие вкладок, прогулка по сайту, ввод данных в формы и так далее.
Ниже мы добавили несколько примеров работы с профилем посредством Puppeteer на JavaScript (Node.js) и Python (Pyppeteer). В каждом примере присутствуют комментарии для вашего удобства.
Инструкции по добавлению библиотек в свой проект вы сможете найти на сайте разработчика.
Примеры
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.connect({
browserURL: 'http://127.0.0.1:20701',
defaultViewport: null,
});
const context = browser.browserContexts()[0];
const page = await context.newPage();
await page.goto('https://google.com');
await page.close();
browser.disconnect();
})();import asyncio
from pyppeteer import connect
async def main():
browser = await connect(browserURL='http://127.0.0.1:20701', defaultViewport=None)
page = await browser.newPage()
await page.goto('https://www.google.com')
await page.close()
await browser.disconnect()
asyncio.get_event_loop().run_until_complete(main())Playwright
Общая информация
Playwright — это библиотека Node.js для автоматизации Chromium, Firefox и WebKit с помощью API.
По функционалу ничем не уступает Puppeteer и другим библиотекам автоматизации.
Примеры
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.connectOverCDP('http://127.0.0.1:19397');
const context = browser.contexts()[0];
// Create a new page in the context.
const tab = await context.newPage();
// Navigate to a URL.
await tab.goto('https://www.google.com', {waitUntil: 'domcontentloaded'});
// Close the tab.
await tab.close();
await browser.close();
})();import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.connect_over_cdp(endpoint_url='http://127.0.0.1:20701')
context = browser.contexts[0]
page = await context.new_page()
await page.goto('https://www.google.com')
await page.close()
asyncio.get_event_loop().run_until_complete(main())using Microsoft.Playwright;
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.ConnectOverCDPAsync("http://127.0.0.1:16591");
var context = browser.Contexts[0];
var page = await context.NewPageAsync();
await page.GotoAsync("https://www.google.com", new PageGotoOptions() { WaitUntil = WaitUntilState.NetworkIdle });
var title = await page.TitleAsync();
Console.WriteLine(title);Chromiumoxide (Rust)
Общая информация
Автоматизация с использованием языка программирования Rust осуществляется через библиотеку Chromiumoxide
Примеры
use futures_util::StreamExt;
//// Cargo.toml
// [dependencies]
// chromiumoxide = { version = "0.5.6", default-features = false, features = [
// "tokio",
// "tokio-runtime",
// ] }
// futures-util = "0.3.29"
// tokio = { version = "1.34.0", default-features = false, features = [
// "rt-multi-thread",
// "macros",
// ] }
#[tokio::main]
async fn main() {
// Connect to a browser instance
let (client, mut handler) = chromiumoxide::Browser::connect("http://127.0.0.1:20701")
.await
.expect("failed to connect to browser");
// Spawn a thread with the handler
tokio::spawn(async move {
loop {
let _ = handler.next().await.expect("failed to handle");
}
});
// Create a new tab
let tab = client
.new_page("about:blank")
.await
.expect("failed to create tab");
// Navigate to a URL
tab.goto("https://www.google.com")
.await
.expect("failed to navigate");
// Print the title of the page
let title = tab.get_title().await.expect("failed to get title");
println!("title: {:?}", title);
// Close the tab and disconnect
tab.close().await.expect("failed to close tab");
}Chromedp (Golang)
Общая информация
Автоматизация с использованием языка программирования Go осуществляется через библиотеку chromedp
Chromedp - это быстрый и простой способ управлять браузерами, поддерживающими протокол Chrome DevTools Protocol, в Go без внешних зависимостей.
Примеры
package main
import (
"context"
"github.com/chromedp/chromedp"
)
func main() {
ctx, cancel := chromedp.NewRemoteAllocator(context.Background(), "http://127.0.0.1:17986")
defer cancel()
ctx, cancel = chromedp.NewContext(ctx)
defer cancel()
// Open google.com.
if err := chromedp.Run(ctx,
chromedp.Navigate("https://www.google.com/"),
); err != nil {
panic(err)
}
}