我正在测试Chrome扩展程序,该扩展程序要求用户登录才能使用,但我无法弄清楚如何使用我的测试帐户登录。我已尝试登录accounts.google.com
,但这显然不够;就chrome API而言,没有经过身份验证的用户。
Chrome会继续提示您在chrome://chrome-signin
登录,但由于我无法查看该网页的html,因此我无法确定要在Selenium中与哪些元素进行交互以使用它。
答案 0 :(得分:4)
您可能需要手动登录一次,然后将其用于自动化。 尝试以下代码,可能会对您有所帮助:
System.setProperty("webdriver.chrome.driver","<chrome exe path>");
ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir= <full local path Google Chrome user data default folder>);
WebDriver driver = new ChromeDriver(options);
driver.get("https://mail.google.com");
浏览器启动时手动登录一次。
然后重新运行脚本,它应该使用以前的登录。
希望它会对你有所帮助。
答案 1 :(得分:2)
我认为你仍然可以自动登录。原因是,当打开页面chrome:// chrome-signin时,帐户文本框会自动聚焦,因此您只需要使用键盘登录,而无需知道页面的html如何。
尝试以下代码(您可能需要在某些地方进行一些睡眠以确保所有内容都正确加载。
public void loginToChrome(username, password) {
driver.get("chrome://chrome-signin");
var action = new Actions(driver);
action.sendKeys(username).perform();
action.sendKeys(keys.ENTER).perform();
action.sendKeys(password).perform();
action.sendKeys(keys.ENTER).perform();
}
答案 2 :(得分:0)
首次在常规Chrome浏览器上登录gmail(不是由selenium驱动程序触发的)。登录后,安装EditTheCookie扩展。在gmail选项卡上,单击此扩展图标。它将提供将json格式的cookie复制到剪贴板的选项。将其粘贴到Gmail.data中,将在以下程序中使用。
一旦你过去,将Gmail.data文件放在一个可用的位置以便下面的程序(你可以放在任何地方并相应地在下面的代码中更新该文件的路径)。
我已经开发了这个,并且对我来说是一个有效的解决方案。
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Date;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import com.google.gson.Gson;
public class LoginUtils {
private static final String GMAIL_LOGIN_URL =
"https://accounts.google.com/signin/v2/identifier";
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver = LoginUtils.login(driver, GMAIL_LOGIN_URL, "Gmail.data");
}
public static final WebDriver login(WebDriver driver, String url, String pathOfJsonFileName) {
Cookies[] data = readJson(pathOfJsonFileName);
driver.navigate().to(url);
// Set the expire time of each cookie.
Date expiryTime = new Date(System.currentTimeMillis() + 1000000000);
for (Cookies cookie : data) {
Cookie ck = new Cookie(cookie.getName(), cookie.getValue(), cookie.getDomain(), cookie.getPath(),
expiryTime, Boolean.parseBoolean(cookie.getSecure()), Boolean.parseBoolean(cookie.getHttpOnly()));
driver.manage().addCookie(ck);
}
return driver;
}
private static final Cookies[] readJson(String jsonFileName) {
String json = null;
try {
byte[] encoded = Files.readAllBytes(Paths.get(jsonFileName));
json = new String(encoded);
} catch (Exception e) {
e.printStackTrace();
}
return new Gson().fromJson(json, Cookies[].class);
}
}