Selenium 使用cdp连接指纹浏览器

Selenium 使用cdp连接指纹浏览器

selenium使用指纹浏览器和普通的区别是用itbrowser代替普通的浏览器,并且通过cdp连接,在代码上无需进行其他逻辑上的修改。
要通过Selenium连接一个已经运行的Chrome浏览器实例,你可以使用Chrome DevTools Protocol (CDP)。这通常用于调试或自动化已经打开的浏览器会话。

首先启动浏览器

具体请查看 如何通过命令行和代码启动itbrowser并指定指纹

各语言实现示例

Java实现

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v85.log.Log;

public class ConnectToRunningChrome {
    public static void main(String[] args) {
        // 设置ChromeDriver路径
        System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
        
        // 配置Chrome选项
        ChromeOptions options = new ChromeOptions();
        options.setExperimentalOption("debuggerAddress", "127.0.0.1:9222");
        
        // 创建WebDriver实例
        WebDriver driver = new ChromeDriver(options);
        
        // 连接到CDP
        DevTools devTools = ((ChromeDriver) driver).getDevTools();
        devTools.createSession();
        devTools.send(Log.enable());
        devTools.addListener(Log.entryAdded(), logEntry -> {
            System.out.println("Log: " + logEntry.getText());
        });
        
        // 使用driver进行操作
        driver.get("https://www.example.com");
        System.out.println("Title: " + driver.getTitle());
        
        // 关闭浏览器
        driver.quit();
    }
}

JavaScript (Node.js) 实现

const { Builder } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');

async function connectToRunningChrome() {
    // 配置Chrome选项
    let options = new chrome.Options();
    options.setChromeBinaryPath('/path/to/chrome');
    options.addArguments('--remote-debugging-port=9222');
    options.debuggerAddress('127.0.0.1:9222');

    // 创建WebDriver实例
    let driver = await new Builder()
        .forBrowser('chrome')
        .setChromeOptions(options)
        .build();

    try {
        // 连接到CDP
        const cdpConnection = await driver.createCDPConnection('page');
        
        // 使用driver进行操作
        await driver.get('https://www.example.com');
        console.log('Title:', await driver.getTitle());
    } finally {
        // 关闭浏览器
        await driver.quit();
    }
}

connectToRunningChrome().catch(console.error);

Python实现

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 配置Chrome选项
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

# 创建WebDriver实例
driver = webdriver.Chrome(options=chrome_options)

try:
    # 连接到CDP
    driver.execute_cdp_cmd("Browser.getVersion", {})
    
    # 使用driver进行操作
    driver.get("https://www.example.com")
    print("Title:", driver.title)
finally:
    # 关闭浏览器
    driver.quit()

Golang实现

package main

import (
	"fmt"
	"log"
	"time"

	"github.com/tebeka/selenium"
	"github.com/tebeka/selenium/chrome"
)

func main() {
	// 配置Selenium服务
	const (
		seleniumPath = "/path/to/chromedriver"
		port         = 4444
	)
	opts := []selenium.ServiceOption{}
	service, err := selenium.NewChromeDriverService(seleniumPath, port, opts...)
	if err != nil {
		log.Fatalf("Error starting the ChromeDriver server: %v", err)
	}
	defer service.Stop()

	// 配置Chrome选项
	caps := selenium.Capabilities{
		"browserName": "chrome",
	}
	chromeCaps := chrome.Capabilities{
		DebuggerAddr: "127.0.0.1:9222",
	}
	caps.AddChrome(chromeCaps)

	// 创建WebDriver实例
	wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", port))
	if err != nil {
		log.Fatalf("Error connecting to Chrome: %v", err)
	}
	defer wd.Quit()

	// 使用driver进行操作
	err = wd.Get("https://www.example.com")
	if err != nil {
		log.Fatalf("Error getting page: %v", err)
	}

	title, err := wd.Title()
	if err != nil {
		log.Fatalf("Error getting title: %v", err)
	}
	fmt.Println("Title:", title)

	time.Sleep(5 * time.Second)
}

注意事项

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

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

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

参考:https://itbrowser.net/doc/en/6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值