运行 带有 Selenium WebDriver 的 TOR 浏览器

Run TOR browser with Selenium WebDriver

我目前正在尝试使用 Selenium WebDriver (JAVA) 2.53 和 Firefox 43.0 执行 TOR 6.0.4。我已按照此 post Using Selenium WebDriver with Tor 中的说明进行操作,但在将 TOR 的 profilePath 加载到 Firefox 二进制文件时出现错误。我已经看到可以通过将 TOR profile.default 存档加载到 firefox binaty 来午餐 TOR,但是当使用配置文件实例化二进制文件时,我得到一个驱动程序信息:driver.version:未知。我试过更改 firefox 版本,但仍然如此。在我启动驱动程序的代码下方。我也在使用 Windows.

 String torPath = "C:\Users\Jose Bernhardt\Desktop\Tor Browser\Start Tor Browser.exe";
    String profilePath = "C:\Users\Jose Bernhardt\Desktop\Tor Browser\Browser\TorBrowser\Data\Browser\profile.default";

    File torProfileDir = new File(profilePath);
    FirefoxBinary binary = new FirefoxBinary(new File(torPath));
    FirefoxProfile torProfile = new FirefoxProfile(torProfileDir);
    FirefoxDriver driver = new FirefoxDriver();
    driver.get("http://www.google.com/webhp?complete=1&hl=en");

见下面抛出的异常:

Exception in thread "main" org.openqa.selenium.WebDriverException: Specified firefox binary location does not exist or is not a real file: C:\Users\Jose Bernhardt\Desktop\Tor Browser\Start Tor Browser.exe

似乎我正在加载 Tor.exe 而不是我不得不从 Tor 存档加载 firefox.exe。我改变了我的路径并且正在工作。还修复了我没有将配置文件和二进制文件发送到驱动程序构造函数的问题

 "C:\Users\Jose Bernhardt\Desktop\Tor Browser\Browser\firefox.exe"
FirefoxDriver driver = new FirefoxDriver(binary, torProfile);
System.setProperty("webdriver.firefox.marionette", ".\geckodriver.exe");
        String torPath = "C:\Users\HP\Desktop\Tor Browser\Browser\firefox.exe";
        String profilePath = "C:\Users\HP\Desktop\Tor Browser\Browser\TorBrowser\Data\Browser\profile.default";

        File torProfileDir = new File(profilePath);
        FirefoxBinary binary = new FirefoxBinary(new File(torPath));
        FirefoxProfile torProfile = new FirefoxProfile(torProfileDir);

        FirefoxOptions options = new FirefoxOptions();
        options.setBinary(binary);
        options.setProfile(torProfile);
        options.setCapability(FirefoxOptions.FIREFOX_OPTIONS,options);
        WebDriver driver = new FirefoxDriver(options);

目前 Tor 浏览器支持使用 Mozilla Firefox 这是下面的代码:

System.setProperty("webdriver.gecko.driver", "C:\Users\user\eclipse-workspace\TorSelenium\src\main\resources\geckodriver.exe");//sa used for the firefox
            String torBinaryPath = "C:\Users\user\OneDrive\Desktop\Lk's stuff\Tor Browser\Browser\firefox.exe"; //It is inside the tor browser's folder
            
            
            
            Runtime runTime = Runtime.getRuntime();
            Process torProcess = runTime.exec(torBinaryPath + " -n");
            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);
            FirefoxOptions firefoxOptions = new FirefoxOptions();
            firefoxOptions.setProfile(profile);
            WebDriver driver;
            driver = new FirefoxDriver(firefoxOptions);
            driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
            driver.manage().window().maximize();
            WebDriverWait wait;
            wait = new WebDriverWait(driver, 30);
            JavascriptExecutor js = (JavascriptExecutor) driver;
            //added end
            
            
            
            System.out.println(ean);
            //Thread.sleep(100);
            //driver.navigate().to("https://www.google.com/?hl=en");
            //driver.navigate().to("https://duckduckgo.com/?q=d&ia=web");
            driver.navigate().to("https://www.swiggy.com");

如果你想更改 tor 身份,那么你必须使用上面的代码重新启动 tor:

Runtime.getRuntime().exec("taskkill /f /IM firefox");
            Runtime.getRuntime().exec("taskkill /f /IM firefox.exe");
            if(torProcess.isAlive()) {
                System.out.println("destroying tor");
                torProcess.destroy();
            }
            if(torProcess.isAlive()) {
                System.out.println("forcebly destroying tor");
                torProcess.destroyForcibly();
            }