gpt4 book ai didi

java - 将 Selenium WebDriver 与 Tor 一起使用

转载 作者:IT老高 更新时间:2023-10-28 20:41:15 28 4
gpt4 key购买 nike

因为 Tor Browser Bundle 只是 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 库 here和可以下载的 Tor 浏览器包 here .

最佳答案

因为 Tor Browser Bundle 不允许我使用 WebDriver 扩展,所以我找到了一种解决方法,可以从常规的 Firefox 浏览器运行 Tor。使用这种方法,只要打开 Tor 浏览器,就可以在普通的 Firefox 浏览器上使用 Tor。

  • 打开 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_crashes 设置为较高的值,例如 9999 .

    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;
    }

关于java - 将 Selenium WebDriver 与 Tor 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22978074/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com