我可以使用 Selenium 登录应用程序,然后获取生成的不记名令牌并在 API 调用中使用它吗?

问题描述 投票:0回答:3

您可以使用 Selenium 登录应用程序,然后获取该会话的不记名令牌以将其用于 API 调用吗?有没有办法获得不记名令牌?

我无法使用登录 API 登录应用程序,因为密码已加盐...并且为了使用 API 调用登录后执行操作,我需要不记名令牌,那么您可以获得不记名令牌吗?

或者我们可以使用带有加盐密码生成器的登录 API,但加盐密码功能尚不清楚!

我尝试使用 jsexecuter 来获取不记名令牌。

java selenium-webdriver google-chrome-devtools rest-assured bearer-token
3个回答
0
投票

我个人会研究 JMeter 并通过它进行 API 调用。

您可以参数化 JMeter 调用并从 JMeter 上的响应中提取值以在下一次调用中使用...

看看那个。

Selenium 不会做你想做的事。


0
投票

您可以使用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。


0
投票

是的,您可以通过 JavaScriptExecutor 使用 Selenium 获取浏览器的 sessionStorage 来做到这一点。然后您可以对 sessionStorage 进行子字符串化以找到您的令牌。

© www.soinside.com 2019 - 2024. All rights reserved.