如何在使用HtmlUnit时“绕过”Steam登录?

时间:2015-05-21 19:35:22

标签: java htmlunit steam

我想编写一个java程序,可以浏览与steam相关联的网页。问题是我不明白Steam如何自动登录用户。

我认为这些服务使用某种cookie,但我在chrome cookie manager中找不到这些cookie。因此,即使我编写了一个单击登录按钮的程序,然后转到登录页面,然后填写它,安全页面会出现,要求确认电子邮件,我不能也不想编程。 这些网站为tf2outpost.combackpack.tf

1 个答案:

答案 0 :(得分:1)

实际上,该网站存在错误。

  1. 使用真实浏览器转到http://www.tf2outpost.com/
  2. 点击“通过STEAM登录”
  3. 检查登录页面的来源,在#51行有:
  4. <script language="javascript">
        function Logout()
        {
            $('actionInput').value = 'steam_openid_logout';
            $('openidForm').submit();
        }
    
        >$J( function() { $J('#steamAccountName').focus() } );
    
    </script>
    

    >$J的问题,这是一个不正确的JavaScript,HtmlUnit不允许这样做。

    要解决此问题,您可以按照提示here更改回复。

    所以你可以拥有类似的东西:

    try (WebClient webClient = new WebClient(BrowserVersion.CHROME)) {
        new WebConnectionWrapper(webClient) {
    
            public WebResponse getResponse(WebRequest request) throws IOException {
                WebResponse response = super.getResponse(request);
                if (request.getUrl().toExternalForm().endsWith("identifier_select")) {
                    String content = response.getContentAsString("UTF-8");
                    content = content.replace(">$J( function()", "$J( function()");
                    WebResponseData data = new WebResponseData(content.getBytes("UTF-8"),
                            response.getStatusCode(), response.getStatusMessage(), response.getResponseHeaders());
                    response = new WebResponse(data, request, response.getLoadTime());
                }
                return response;
            }
        };
    
        HtmlPage page = webClient.getPage("http://www.tf2outpost.com");
        HtmlAnchor a = page.getAnchorByHref("/login");
        page = a.click();
        page.<HtmlInput>getHtmlElementById("steamAccountName").setValueAttribute(username);
        page.<HtmlInput>getHtmlElementById("steamPassword").setValueAttribute(password);
        page = page.<HtmlInput>getHtmlElementById("imageLogin").click();
        webClient.waitForBackgroundJavaScript(5000);
        System.out.println(page.asXml());
    

    不过,这里有验证码。

    希望有所帮助。