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。如果你不知道端口号:
- 查看 Chrome 启动参数
- 检查 Chrome 用户数据目录中的调试端口文件
playwright如何添加浏览器指纹?
浏览器使用itbrowser代替普通的浏览器,启动浏览器的时候添加参数–itbrowser=finger.json 指定指纹配置文件即可。无需修改playwright代码。