将Selenium WebDriver与Tor一起使用

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

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浏览器捆绑包可以在这里下载。

回答:

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

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

}

        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;

}

以上是 将Selenium WebDriver与Tor一起使用 的全部内容, 来源链接: utcz.com/qa/404346.html

回到顶部