Jsoup 登录网站 returns 只有头 html
Jsoup Login in to website returns only head of the html
我在尝试登录网站时遇到了这个问题。我正在尝试登录此网站:https://student.naviance.com/sbrunswick。作为示例,我正在尝试抓取网站中的用户名称。
这是我现在的代码:
String initialUrl = "https://student.naviance.com/sbrunswick";
String finalUrl = "https://student.naviance.com/main";
String username = "***myusername***";
String password = "***mypassword***";
Connection.Response loginPageResponse = Jsoup.connect(initialUrl)
.userAgent("Mozilla/5.0")
.timeout(10 * 1000)
.followRedirects(true)
.execute();
Map<String, String> cookie = loginPageResponse.cookies();
Map<String, String> mapParams = new HashMap<String, String>();
mapParams.put("login-username", username);
mapParams.put("login-password", password);
mapParams.put("remember_me", "");
Connection.Response responsePostLogin = Jsoup.connect(finalUrl)
.referrer(initialUrl)
.userAgent("Mozilla/5.0")
.timeout(10 * 1000)
.data(mapParams)
.cookies(cookie)
.followRedirects(true)
.execute();
Document document = responsePostLogin.parse();
Log.d("HTML", document.html());
Document page = Jsoup.connect(finalUrl).userAgent("Mozilla/5.0").cookies(cookie).get();
Log.d("NAME", page.select(".h1 components-PageTitle-styles-pageTitle components-LandingHeader-styles-title").text());
我分析了网站的表格,我很确定我填写了所有表格(包括隐藏表格)。但是,HTML 日志并未显示整个 HTML 页面。它只显示头部。这是当我在 Android Studio 的 Logcat 中搜索“HTML”时日志显示的内容。
<!doctype html>
<html lang="en-US">
<head>
<title>Naviance Student</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="apple-touch-icon" href="/apple-icon.png">
<link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
<link rel="apple-touch-startup-image" href="/apple-icon.png">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-title" content="Naviance Student">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
<link rel="manifest" href="/manifest.json">
<meta http-equiv="Page-Enter" content="RevealTrans(Duration=2.0,Transition=2)">
<meta http-equiv="Page-Exit" content="RevealTrans(Duration=3.0,Transition=12)">
<meta http-equiv="cleartype" content="on">
<meta name="msapplication-config" content="IEconfig.xml">
<meta name="application-name" content="Naviance Student">
<meta name="author" content="Naviance">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
<link href="/style-16726.css" rel="stylesheet">
<link rel="preload" href="/main.e6791.js" as="script">
</head>
<body>
<script src="/rewritten_config.js?v=1605811315155"></script>
<div id="root"></div>
<script src="/fc.vendors~main.bb74e.js"></script>
<script src="/main.e6791.js" async></script>
</body>
</html>
尽管这段代码说的是“body”,但当我进入实际网站并查看时,这段代码实际上是头部的一部分。
我对 Jsoup 还是个新手,我以为我明白了,所以我去庆祝以为我明白了半个小时才意识到它不起作用。
关于如何解决这个问题的任何想法?谢谢。
如果您了解 JSoup,您可能了解它的工作原理。 HTML 和 HTTP 的工作方式可能有很大差异...static/responsive/mostly 静态与 cookies/etc 中的一些 responsive/use。
您需要弄清楚是否还有其他事情发生。我怀疑执行登录不会像单独传递 username/password 那样简单,而是需要一个 session ID,可能是一个 'Referer' header 和某种形式的令牌。
如果您打开 /rewritten_config.js?v=1605811315155
,您可能会发现一些 GET ajax 请求和一堆 document.write
语句……可能被严重混淆了。可以理解发生了什么,但我通常会为此苦苦挣扎,所以不会花时间在上面。
您最好尝试其他技术,例如 selenium/phantomJS 或其他 headless-browser。 HtmlUnit 类似于 Jsoup,可能会起作用,但您必须尝试一下才能看到。
我在尝试登录网站时遇到了这个问题。我正在尝试登录此网站:https://student.naviance.com/sbrunswick。作为示例,我正在尝试抓取网站中的用户名称。
这是我现在的代码:
String initialUrl = "https://student.naviance.com/sbrunswick";
String finalUrl = "https://student.naviance.com/main";
String username = "***myusername***";
String password = "***mypassword***";
Connection.Response loginPageResponse = Jsoup.connect(initialUrl)
.userAgent("Mozilla/5.0")
.timeout(10 * 1000)
.followRedirects(true)
.execute();
Map<String, String> cookie = loginPageResponse.cookies();
Map<String, String> mapParams = new HashMap<String, String>();
mapParams.put("login-username", username);
mapParams.put("login-password", password);
mapParams.put("remember_me", "");
Connection.Response responsePostLogin = Jsoup.connect(finalUrl)
.referrer(initialUrl)
.userAgent("Mozilla/5.0")
.timeout(10 * 1000)
.data(mapParams)
.cookies(cookie)
.followRedirects(true)
.execute();
Document document = responsePostLogin.parse();
Log.d("HTML", document.html());
Document page = Jsoup.connect(finalUrl).userAgent("Mozilla/5.0").cookies(cookie).get();
Log.d("NAME", page.select(".h1 components-PageTitle-styles-pageTitle components-LandingHeader-styles-title").text());
我分析了网站的表格,我很确定我填写了所有表格(包括隐藏表格)。但是,HTML 日志并未显示整个 HTML 页面。它只显示头部。这是当我在 Android Studio 的 Logcat 中搜索“HTML”时日志显示的内容。
<!doctype html>
<html lang="en-US">
<head>
<title>Naviance Student</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="apple-touch-icon" href="/apple-icon.png">
<link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
<link rel="apple-touch-startup-image" href="/apple-icon.png">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-title" content="Naviance Student">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
<link rel="manifest" href="/manifest.json">
<meta http-equiv="Page-Enter" content="RevealTrans(Duration=2.0,Transition=2)">
<meta http-equiv="Page-Exit" content="RevealTrans(Duration=3.0,Transition=12)">
<meta http-equiv="cleartype" content="on">
<meta name="msapplication-config" content="IEconfig.xml">
<meta name="application-name" content="Naviance Student">
<meta name="author" content="Naviance">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
<link href="/style-16726.css" rel="stylesheet">
<link rel="preload" href="/main.e6791.js" as="script">
</head>
<body>
<script src="/rewritten_config.js?v=1605811315155"></script>
<div id="root"></div>
<script src="/fc.vendors~main.bb74e.js"></script>
<script src="/main.e6791.js" async></script>
</body>
</html>
尽管这段代码说的是“body”,但当我进入实际网站并查看时,这段代码实际上是头部的一部分。
我对 Jsoup 还是个新手,我以为我明白了,所以我去庆祝以为我明白了半个小时才意识到它不起作用。
关于如何解决这个问题的任何想法?谢谢。
如果您了解 JSoup,您可能了解它的工作原理。 HTML 和 HTTP 的工作方式可能有很大差异...static/responsive/mostly 静态与 cookies/etc 中的一些 responsive/use。
您需要弄清楚是否还有其他事情发生。我怀疑执行登录不会像单独传递 username/password 那样简单,而是需要一个 session ID,可能是一个 'Referer' header 和某种形式的令牌。
如果您打开 /rewritten_config.js?v=1605811315155
,您可能会发现一些 GET ajax 请求和一堆 document.write
语句……可能被严重混淆了。可以理解发生了什么,但我通常会为此苦苦挣扎,所以不会花时间在上面。
您最好尝试其他技术,例如 selenium/phantomJS 或其他 headless-browser。 HtmlUnit 类似于 Jsoup,可能会起作用,但您必须尝试一下才能看到。