playwright使用it指纹浏览器

itbrowser和普通浏览器完全兼容,无需修改代码。唯一的要求是通过cdp连接的方式连接浏览器。
Playwright 支持通过 Chrome DevTools Protocol (CDP) 连接已经运行的 Chrome 浏览器实例。本教程将展示如何在 JavaScript、Python 和 Go 中实现这一功能。

启动 Chrome 调试模式

首先需要以调试模式启动 Chrome

"C:\itbrowser\chrome.exe" --itbrowser=C:\fingerprints\fingerprints_1.json  --remote-debugging-port=9222

代码模式启动浏览器看教程 调试模式启动浏览器

JavaScript 版本playwright 通过cdp连接chrome

 1const { chromium } = require('playwright');
 2
 3(async () => {
 4  // 连接到运行中的 Chrome 实例
 5  const browser = await chromium.connectOverCDP('http://localhost:9222');
 6  
 7  // 获取第一个上下文中的第一个页面
 8  const defaultContext = browser.contexts()[0];
 9  const page = defaultContext.pages()[0] || await defaultContext.newPage();
10  
11  console.log('已连接到页面:', page.url());
12  
13  // 使用页面
14  await page.goto('https://example.com');
15  console.log('当前页面标题:', await page.title());
16  
17  // 获取 CDP 会话进行底层操作
18  const client = await page.context().newCDPSession(page);
19  await client.send('Network.enable');
20  client.on('Network.requestWillBeSent', event => {
21    console.log('请求发送:', event.request.url);
22  });
23  
24  // 等待一段时间查看网络请求
25  await page.waitForTimeout(5000);
26  
27  await browser.close();
28})();

Python 版本playwright 通过cdp连接chrome

 1from playwright.sync_api import sync_playwright
 2
 3with sync_playwright() as p:
 4    # 连接到运行中的 Chrome 实例
 5    browser = p.chromium.connect_over_cdp("http://localhost:9222")
 6    
 7    # 获取第一个上下文中的第一个页面
 8    default_context = browser.contexts[0]
 9    page = default_context.pages[0] if default_context.pages else default_context.new_page()
10    
11    print(f"已连接到页面: {page.url}")
12    
13    # 使用页面
14    page.goto("https://example.com")
15    print(f"当前页面标题: {page.title()}")
16    
17    # 获取 CDP 会话进行底层操作
18    client = page.context.new_cdp_session(page)
19    client.send("Network.enable")
20    
21    def print_request(event):
22        print(f"请求发送: {event['request']['url']}")
23    
24    client.on("Network.requestWillBeSent", print_request)
25    
26    # 等待一段时间查看网络请求
27    page.wait_for_timeout(5000)
28    
29    browser.close()

Go 版本playwright 通过cdp连接chrome

 1package main
 2
 3import (
 4	"context"
 5	"fmt"
 6	"log"
 7	"time"
 8
 9	"github.com/playwright-community/playwright-go"
10)
11
12func main() {
13	pw, err := playwright.Run()
14	if err != nil {
15		log.Fatalf("无法启动 Playwright: %v", err)
16	}
17	defer pw.Stop()
18
19	// 连接到运行中的 Chrome 实例
20	browser, err := pw.Chromium.ConnectOverCDP("http://localhost:9222")
21	if err != nil {
22		log.Fatalf("连接 Chrome 失败: %v", err)
23	}
24	defer browser.Close()
25
26	// 获取第一个上下文中的第一个页面
27	contexts := browser.Contexts()
28	if len(contexts) == 0 {
29		log.Fatalf("未找到浏览器上下文")
30	}
31	defaultContext := contexts[0]
32	pages := defaultContext.Pages()
33	var page playwright.Page
34	if len(pages) > 0 {
35		page = pages[0]
36	} else {
37		page, err = defaultContext.NewPage()
38		if err != nil {
39			log.Fatalf("创建新页面失败: %v", err)
40		}
41	}
42
43	fmt.Printf("已连接到页面: %s\n", page.URL())
44
45	// 使用页面
46	if _, err := page.Goto("https://example.com"); err != nil {
47		log.Fatalf("导航失败: %v", err)
48	}
49	title, err := page.Title()
50	if err != nil {
51		log.Fatalf("获取标题失败: %v", err)
52	}
53	fmt.Printf("当前页面标题: %s\n", title)
54
55	// 获取 CDP 会话进行底层操作
56	client, err := defaultContext.NewCDPSession(page)
57	if err != nil {
58		log.Fatalf("创建 CDP 会话失败: %v", err)
59	}
60
61	if err := client.Send("Network.enable", nil); err != nil {
62		log.Fatalf("启用网络监控失败: %v", err)
63	}
64
65	eventChannel := make(chan interface{})
66	client.On("Network.requestWillBeSent", func(ev interface{}) {
67		event := ev.(map[string]interface{})
68		request := event["request"].(map[string]interface{})
69		fmt.Printf("请求发送: %s\n", request["url"])
70	})
71
72	// 等待一段时间查看网络请求
73	time.Sleep(5 * time.Second)
74
75	// 关闭浏览器连接
76	if err := browser.Close(); err != nil {
77		log.Fatalf("关闭浏览器失败: %v", err)
78	}
79}

如何找到 Chrome 的调试端口?

默认情况下,我们使用 --remote-debugging-port=9222 参数启动 Chrome。如果你不知道端口号:

playwright如何添加浏览器指纹?

浏览器使用itbrowser代替普通的浏览器,启动浏览器的时候添加参数–itbrowser=finger.json 指定指纹配置文件即可。无需修改playwright代码。