将 Selenium WebDriver 与 Tor 一起使用

因为 Tor 浏览器捆绑包只是 Firefox 的补丁版本,所以似乎应该可以使用 Tor 浏览器。这是我到目前为止尝试过的:FirefoxDriver

String torPath = "C:\\Users\\My User\\Desktop\\Tor Browser\\Start Tor Browser.exe";
String profilePath = "C:\\Users\\My User\\Desktop\\Tor Browser\\Data\\Browser\\profile.default";
FirefoxProfile profile = new FirefoxProfile(new File(profilePath));
FirefoxBinary binary = new FirefoxBinary(new File(torPath));
FirefoxDriver driver = new FirefoxDriver(binary, profile);
driver.get("http://www.google.com");

这会导致一个空白的Tor浏览器页面打开,并弹出一条消息:无法加载您的Firefox配置文件。它可能丢失或无法访问。

我知道配置文件是有效/兼容的,因为我可以成功启动浏览器和配置文件:

binary.startProfile(profile, profilePath, ""));

但是,我不知道如何将命令发送到以这种方式打开的浏览器。

我发现了类似的问题,但我专门寻找Java解决方案,最好在Windows上进行测试。

我正在使用一个独立的Selenium库,可以在这里下载,Tor浏览器包可以在这里下载。


答案 1

因为Tor浏览器捆绑包不允许我使用WebDriver扩展,所以我找到了一个解决方法,我从常规的Firefox浏览器运行Tor。使用这种方法,只要Tor浏览器处于打开状态,您就可以将Tor与常规Firefox浏览器一起使用。

  • 打开 Tor 浏览器

    File torProfileDir = new File(
            "...\\Tor Browser\\Data\\Browser\\profile.default");
    FirefoxBinary binary = new FirefoxBinary(new File(
            "...\\Tor Browser\\Start Tor Browser.exe"));
    FirefoxProfile torProfile = new FirefoxProfile(torProfileDir);
    torProfile.setPreference("webdriver.load.strategy", "unstable");
    
    try {
        binary.startProfile(torProfile, torProfileDir, "");
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  • 使用一些配置打开 Firefox

    FirefoxProfile profile = new FirefoxProfile();
    profile.setPreference("network.proxy.type", 1);
    profile.setPreference("network.proxy.socks", "127.0.0.1");
    profile.setPreference("network.proxy.socks_port", 9150);
    FirefoxDriver = new FirefoxDriver(profile);
    
  • 关闭浏览器。请注意,如果您计划进行大量关闭和重新打开(在获取新的IP地址时很有用),我建议将配置文件首选项设置为高值,例如。toolkit.startup.max_resumed_crashes9999

    private void killFirefox() {
        Runtime rt = Runtime.getRuntime();
    
        try {
            rt.exec("taskkill /F /IM firefox.exe");
            while (processIsRunning("firefox.exe")) {
                Thread.sleep(100);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private boolean processIsRunning(String process) {
        boolean processIsRunning = false;
        String line;
        try {
            Process proc = Runtime.getRuntime().exec("wmic.exe");
            BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            OutputStreamWriter oStream = new OutputStreamWriter(proc.getOutputStream());
            oStream.write("process where name='" + process + "'");
            oStream.flush();
            oStream.close();
            while ((line = input.readLine()) != null) {
                if (line.toLowerCase().contains("caption")) {
                    processIsRunning = true;
                    break;
                }
            }
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return processIsRunning;
    }
    

答案 2

我会尝试指定其中一个现有配置文件的路径,并为Tor初始化你的配置文件实例,这样你的代码就会看起来像这样:

String torPath = "..\\Tor Browser\\Browser\\firefox.exe";
String profilePath = "..\\Tor Browser\\Data\Browser\\profile.default";
FirefoxProfile profile = new FirefoxProfile(new File(profilePath));
FirefoxBinary binary = new FirefoxBinary(new File(torPath));
FirefoxDriver driver = new FirefoxDriver(binary, profile);
driver.get("http://www.google.com");

我没有尝试这个,因为我在家里没有设置WebDriver,但这应该允许您指定配置文件。


推荐