java HtmlUnit:在登录自动化中处理隐藏的Google reCAPTCHA令牌

toe95027  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(119)

我正在使用HtmlUnit来自动化网站上的登录过程。该网站使用Google reCAPTCHA来保护其登录表单,并且reCAPTCHA令牌隐藏在HTML中。我需要获取并使用此令牌才能成功登录。令牌在登录(POST)请求http-form-urlencoded中作为内容类型自动发送。
下面是我的代码:

try (final WebClient webClient = new WebClient()) {
webClient.getOptions().setCssEnabled(true);
webClient.getOptions().setRedirectEnabled(true);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getCookieManager().setCookiesEnabled(true);

HtmlPage page = webClient.getPage(LOGIN_URL);
HtmlForm form = page.getFormByName("login-form");

form.getInputByName("login[username]").setValueAttribute(USERNAME);
form.getInputByName("login[password]").setValueAttribute(PASSWORD);

HtmlButton submitButton = form.getFirstByXPath("//*[@id=\"send2\"]");
HtmlPage loggedInPage = submitButton.click();

System.out.println("Page Body: " + loggedInPage.getBody().asText());

} catch (Exception e) {
    e.printStackTrace();
}

为什么HtmlUnit不像预期的那样工作,我的意思是,因为我看到它没有发送登录请求,但我看到所有必要的reCaptcha相关的URL正在执行,这甚至是隐藏的reCaptcha,所以它不需要用户交互。有人能帮帮我吗?任何帮助或示例代码将不胜感激。

bmvo0sr5

bmvo0sr51#

你不能这样登录那个网页。人类访客验证,如reCAPTCHA和cloudflare turnstile,旨在阻止和防止您试图做的事情。
您将不得不联系该网站的管理层,以访问允许您使用自动登录的API。
如果没有,您必须使用Web浏览器手动登录,然后复制登录会话cookie并在发出请求之前添加它们:

webClient.getCookieManager().addCookie(new Cookie(domain, name, value));

相关问题