【问题标题】:HTML of webpage and Jsoup response are not the same网页的 HTML 和 Jsoup 的响应不一样
【发布时间】:2018-01-20 01:14:03
【问题描述】:
Connection.Response loginResponse = Jsoup.connect("https://users.premierleague.com/accounts/login/")
                    .userAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)")
                    .data("csrfmiddlewaretoken", csrfmiddlewaretokenValue)
                    .data("login", "anand.svm99@gmail.com")
                    .data("password", "****")
                    .data("app", "plfpl-web")
                    .data("redirect_uri", "https://fantasy.premierleague.com/a/team/my")
                    .timeout(600000)
                    .cookie("auth", "token")
                    .method(Connection.Method.POST)
                    .execute();

我正在使用上面的代码在我的 Android 应用程序中使用 Jsoup 登录网站。但是登录后网页的实际 HTML 和 Jsoup 的响应是不同的。在 Jsoup 响应中找不到网页的主体。我想这是一些安全功能。我尝试过不同的用户代理和较大的超时值,但没有运气。我该怎么做才能解决这个问题?

【问题讨论】:

    标签: java android html jsoup html-parsing


    【解决方案1】:

    在 SPA(单页应用程序)的情况下,DOM 不会加载,而是动态生成。所以页面只包含一个 DOM 根 - 例如一个 div,其余的都由 JavaScript 构建。

    例如基于 React 的 Web 应用程序。

    JSoup 在这种情况下无济于事。

    解决检查浏览器发送的内容并尝试模仿请求解析响应。

    【讨论】:

    • 我在响应中找不到所需的元素。硒会有帮助吗?
    • 恕我直言,我不是硒专家。 Selenium 应该会有所帮助,但您需要再次使用浏览器对象并使用来自浏览器的 getElementByID() 不期望 HTML 包含标签。
    • 谢谢。你确定这个网站是 SPA 吗?我如何找到它?
    • 我不确定。 SPA 只是最简单的例子。尝试检查网站是如何使用builtwith.com/?https%3a%2f%2ffantasy.premierleague.com 构建的
    • 另一种可能是重定向。返回一个简单的几乎为空的页面,但在该用户被重定向之后。我看到重定向参数。可以是用户登录后重定向页面上的所有内容。
    猜你喜欢
    • 2019-11-20
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2017-05-20
    • 2013-01-02
    • 2015-09-14
    相关资源
    最近更新 更多