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}

注意事项

  1. 确保Chrome浏览器是以调试模式启动的,例如:

    chrome.exe --itbrowser=myfingerprint.json --remote-debugging-port=9222 --user-data-dir=/path/to/temp/dir
    
  2. 各语言实现中,需要正确设置ChromeDriver的路径和Chrome浏览器的路径。

  3. 端口号(如9222)需要保持一致,既在启动Chrome时指定的端口,也在代码中连接的端口。