我正在使用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,所以它不需要用户交互。有人能帮帮我吗?任何帮助或示例代码将不胜感激。
1条答案
按热度按时间bmvo0sr51#
你不能这样登录那个网页。人类访客验证,如reCAPTCHA和cloudflare turnstile,旨在阻止和防止您试图做的事情。
您将不得不联系该网站的管理层,以访问允许您使用自动登录的API。
如果没有,您必须使用Web浏览器手动登录,然后复制登录会话cookie并在发出请求之前添加它们: