您可以使用 Selenium 登录应用程序,然后获取该会话的不记名令牌以将其用于 API 调用吗?有没有办法获得不记名令牌?
我无法使用登录 API 登录应用程序,因为密码已加盐...并且为了使用 API 调用登录后执行操作,我需要不记名令牌,那么您可以获得不记名令牌吗?
或者我们可以使用带有加盐密码生成器的登录 API,但加盐密码功能尚不清楚!
我尝试使用 jsexecuter 来获取不记名令牌。
我个人会研究 JMeter 并通过它进行 API 调用。
您可以参数化 JMeter 调用并从 JMeter 上的响应中提取值以在下一次调用中使用...
看看那个。
Selenium 不会做你想做的事。
您可以使用Playwright来做到这一点。下面是示例代码。
public String accessToken = "";
@BeforeClass(alwaysRun = true)
public void getAPITokenFromBrowser() {
Playwright playwright = Playwright.create();
Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false));
Page page = browser.newPage();
page.onRequest(request -> {
if (request.url().equals("www.YOUR_APP_URL" + "/API_PATH_FROM_NETWORK_TAB")) { //if the API Call is found with above condition then spliting using Space because these days api tokens are in format "Bearer abcdsdsdsd"
String[] token = request.headers().get("authorization").split(" ");
this.accessToken = token[1];
System.out.println("AccessToken: " + accessToken);
}
});
page.navigate(YOUR_URL);
page.waitForLoadState(LoadState.LOAD);
page.fill("UsernameXpath", "username");
page.fill("PasswordXpath", "Password");
page.click("LoginBtnXpath");
page.waitForLoadState(LoadState.LOAD);
playwright.close();
}
执行此代码块后,您将在变量accessToken中获得令牌。这里唯一重要的是识别 API_PATH_FROM_NETWORK_TAB。
是的,您可以通过 JavaScriptExecutor 使用 Selenium 获取浏览器的 sessionStorage 来做到这一点。然后您可以对 sessionStorage 进行子字符串化以找到您的令牌。