Selenium 使用itbrowser指纹浏览器
selenium使用指纹浏览器和普通的区别是用itbrowser代替普通的浏览器,并且通过cdp连接,在代码上无需进行其他逻辑上的修改。
要通过Selenium连接一个已经运行的Chrome浏览器实例,你可以使用Chrome DevTools Protocol (CDP)。这通常用于调试或自动化已经打开的浏览器会话。
首先启动浏览器
具体请查看 如何通过命令行和代码启动itbrowser并指定指纹
各语言实现示例
Java实现
1import org.openqa.selenium.WebDriver;
2import org.openqa.selenium.chrome.ChromeDriver;
3import org.openqa.selenium.chrome.ChromeOptions;
4import org.openqa.selenium.devtools.DevTools;
5import org.openqa.selenium.devtools.v85.log.Log;
6
7public class ConnectToRunningChrome {
8 public static void main(String[] args) {
9 // 设置ChromeDriver路径
10 System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
11
12 // 配置Chrome选项
13 ChromeOptions options = new ChromeOptions();
14 options.setExperimentalOption("debuggerAddress", "127.0.0.1:9222");
15
16 // 创建WebDriver实例
17 WebDriver driver = new ChromeDriver(options);
18
19 // 连接到CDP
20 DevTools devTools = ((ChromeDriver) driver).getDevTools();
21 devTools.createSession();
22 devTools.send(Log.enable());
23 devTools.addListener(Log.entryAdded(), logEntry -> {
24 System.out.println("Log: " + logEntry.getText());
25 });
26
27 // 使用driver进行操作
28 driver.get("https://www.example.com");
29 System.out.println("Title: " + driver.getTitle());
30
31 // 关闭浏览器
32 driver.quit();
33 }
34}
JavaScript (Node.js) 实现
1const { Builder } = require('selenium-webdriver');
2const chrome = require('selenium-webdriver/chrome');
3
4async function connectToRunningChrome() {
5 // 配置Chrome选项
6 let options = new chrome.Options();
7 options.setChromeBinaryPath('/path/to/chrome');
8 options.addArguments('--remote-debugging-port=9222');
9 options.debuggerAddress('127.0.0.1:9222');
10
11 // 创建WebDriver实例
12 let driver = await new Builder()
13 .forBrowser('chrome')
14 .setChromeOptions(options)
15 .build();
16
17 try {
18 // 连接到CDP
19 const cdpConnection = await driver.createCDPConnection('page');
20
21 // 使用driver进行操作
22 await driver.get('https://www.example.com');
23 console.log('Title:', await driver.getTitle());
24 } finally {
25 // 关闭浏览器
26 await driver.quit();
27 }
28}
29
30connectToRunningChrome().catch(console.error);
Python实现
1from selenium import webdriver
2from selenium.webdriver.chrome.options import Options
3
4# 配置Chrome选项
5chrome_options = Options()
6chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
7
8# 创建WebDriver实例
9driver = webdriver.Chrome(options=chrome_options)
10
11try:
12 # 连接到CDP
13 driver.execute_cdp_cmd("Browser.getVersion", {})
14
15 # 使用driver进行操作
16 driver.get("https://www.example.com")
17 print("Title:", driver.title)
18finally:
19 # 关闭浏览器
20 driver.quit()
Golang实现
1package main
2
3import (
4 "fmt"
5 "log"
6 "time"
7
8 "github.com/tebeka/selenium"
9 "github.com/tebeka/selenium/chrome"
10)
11
12func main() {
13 // 配置Selenium服务
14 const (
15 seleniumPath = "/path/to/chromedriver"
16 port = 4444
17 )
18 opts := []selenium.ServiceOption{}
19 service, err := selenium.NewChromeDriverService(seleniumPath, port, opts...)
20 if err != nil {
21 log.Fatalf("Error starting the ChromeDriver server: %v", err)
22 }
23 defer service.Stop()
24
25 // 配置Chrome选项
26 caps := selenium.Capabilities{
27 "browserName": "chrome",
28 }
29 chromeCaps := chrome.Capabilities{
30 DebuggerAddr: "127.0.0.1:9222",
31 }
32 caps.AddChrome(chromeCaps)
33
34 // 创建WebDriver实例
35 wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", port))
36 if err != nil {
37 log.Fatalf("Error connecting to Chrome: %v", err)
38 }
39 defer wd.Quit()
40
41 // 使用driver进行操作
42 err = wd.Get("https://www.example.com")
43 if err != nil {
44 log.Fatalf("Error getting page: %v", err)
45 }
46
47 title, err := wd.Title()
48 if err != nil {
49 log.Fatalf("Error getting title: %v", err)
50 }
51 fmt.Println("Title:", title)
52
53 time.Sleep(5 * time.Second)
54}
注意事项
-
确保Chrome浏览器是以调试模式启动的,例如:
chrome.exe --itbrowser=myfingerprint.json --remote-debugging-port=9222 --user-data-dir=/path/to/temp/dir
-
各语言实现中,需要正确设置ChromeDriver的路径和Chrome浏览器的路径。
-
端口号(如9222)需要保持一致,既在启动Chrome时指定的端口,也在代码中连接的端口。