使用Selenium WebDriver运行TOR浏览器

时间:2016-08-24 23:19:36

标签: java selenium webdriver tor

我目前正在尝试使用Selenium WebDriver(JAVA)2.53和Firefox 43.0执行TOR 6.0.4。我已按照此帖Using Selenium WebDriver with Tor中的说明操作,但在将TOR的profilePath加载到Firefox二进制文件时出错。我已经看到可以通过将TOR profile.default存档加载到firefox binaty来进行TOR午餐,但我得到一个驱动程序信息:driver.version:unknown,当用配置文件实例化二进制文件时。我试图改变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

3 个答案:

答案 0 :(得分:3)

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

 "C:\\Users\\Jose Bernhardt\\Desktop\\Tor Browser\\Browser\\firefox.exe"
FirefoxDriver driver = new FirefoxDriver(binary, torProfile);

答案 1 :(得分:2)

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

答案 2 :(得分:0)

到目前为止,使用 Mozilla Firefox 支持 Tor 浏览器 代码如下:

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