![](/img/trans.png)
[英]Is there any way to handle authentication alert using selenium without any OS tool like autoIT and robot
[英]How to handle authentication alert of browser with selenium webdriver using java without autoit and url method
我试图设置代理
Proxy proxy = new Proxy();
proxy.setHttpProxy("http://MY_USERNAME:MY_PASSWORD@MY_HOST:MY_PORT");
它正在重定向到特定的 URL,但实际上并没有设置代理,而是给我本地 IP,而不是 MY_HOST。
我不能使用 autoit 脚本。
请指导我如何处理警报框
我试过driver.switchTo().alert();
但是,在语句driver.get(MY_URL);
之后代码driver.get(MY_URL);
当弹出窗口出现时。
注意:这两个选项(1)通过设置 crx 文件和(2)通过在带有主机和端口的 URL 中提供用户名和密码,都已成功进行身份验证,但请注意,它实际上并未按要求设置代理,而是提供了本地 IP
java.awt.Robot类可用于身份验证
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;
login() throws Exception {
// Pass username
autoType(username);
// to move to Password field
autoTab();
// Enter Password
autoType(password);
// To click on login
autoSubmit();
}
private static void autoType(String string) throws AWTException {
Robot robot = new Robot();
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection stringSelection = new StringSelection(string);
clipboard.setContents(stringSelection, null);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
}
private static void autoTab() throws AWTException {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
}
private static void autoSubmit() throws AWTException {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
}
您可以创建一个可以即时处理代理的 Chrome 扩展程序。 ChromeDriver 不提供任何处理需要凭据的 HTTP 代理的功能。
创建一个包含以下 2 个文件的 zip 文件proxyExtension.zip
;
背景.js
var config = {
mode: "fixed_servers",
rules: {
singleProxy: {
scheme: "http",
host: "YOU_PROXY_ADDRESS",
port: parseInt(YOUR_PROXY_PORT)
},
bypassList: ["foobar.com"]
}
};
chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
function callbackFn(details) {
return {
authCredentials: {
username: "YOUR_PROXY_USERNAME",
password: "YOUR_PROXY_PASSWORD"
}
};
}
chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{urls: ["<all_urls>"]},
['blocking']
);
YOU_PROXY_ADDRESS
、 YOUR_PROXY_PORT
、 YOUR_PROXY_USERNAME
、 YOUR_PROXY_PASSWORD
字段将替换为您的信息。
清单文件
{
"version": "1.0.0",
"manifest_version": 2,
"name": "Chrome Proxy",
"permissions": [
"proxy",
"tabs",
"unlimitedStorage",
"storage",
"<all_urls>",
"webRequest",
"webRequestBlocking"
],
"background": {
"scripts": ["background.js"]
},
"minimum_chrome_version":"22.0.0"
}
然后,使用以下代码初始化 webdriver;
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addExtensions(new File("path_to_extension_file/proxyExtension.zip"));
WebDriver driver = new ChromeDriver(chromeOptions);
请将path_to_extension_file
更改为包含proxyExtension.zip
文件的目录。
您还可以在 链接上找到更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.