在抓取网站之前使用JSoup登录

时间:2014-10-29 19:54:09

标签: java forms post login jsoup

我试图使用Jsoup登录网站,然后抓取内容。我已经阅读了一些类似的问题,并认为我需要做POST并传递所有输入参数。我已经做到了这一点,但由于某种原因它仍然无法运作。非常感谢任何帮助。

HTML表单:

<form method="post" action="https://login.yahoo.com/config/login?" name="login_form" id="login_form" onsubmit="return hash2(this)">
<input type="hidden" name="sessionId" id="sessionId" value="IyLZEAs5n9RP">
<input type="hidden" name=".tries" value="1">
<input type="hidden" name=".src" value="spt">
<input type="hidden" name=".md5" value="">
<input type="hidden" name=".hash" value="">
<input type="hidden" name=".js" value="">
<input type="hidden" name=".last" value="">
<input type="hidden" name="promo" value="">
<input type="hidden" name=".intl" value="us">
<input type="hidden" name=".lang" value="en-US">
<input type="hidden" name=".bypass" value="">
<input type="hidden" name=".partner" value="">
<input type="hidden" name=".u" value="516l00ha52emg">
<input type="hidden" name=".v" value="0">
<input type="hidden" name=".challenge" value="HupRQ9x1ptIRHP1H8P9eYBbAlofE4YsoSQ--">
<input type="hidden" name=".yplus" value="">
<input type="hidden" name=".emailCode" value="">
<input type="hidden" name="pkg" value="">
<input type="hidden" name="stepid" value="">
<input type="hidden" name=".ev" value="">
<input type="hidden" name="hasMsgr" value="0">
<input type="hidden" name=".chkP" value="Y">
<input type="hidden" name=".done" value="http://hockey.fantasysports.yahoo.com/hockey/27381/startingrosters?.scrumb=0">
<input type="hidden" name=".pd" value="spt_ver=0&c=&ivt=&sg=">
<input type="hidden" name=".ws" id=".ws" value="0">
<input type="hidden" name=".cp" id=".cp" value="0">     
<input type="hidden" name="nr" value="0">
    <input type="hidden" name="pad" id="pad" value="6">
<input type="hidden" name="aad" id="aad" value="6">

<div id='inputs'>
                <input name='login' id='username' type="text" maxlength='96' tabindex='1' aria-required="true" placeholder="Yahoo ID" autocorrect="off" value="">
                <input name='passwd' id='passwd' type='password' maxlength='64' tabindex='2' aria-required="true" placeholder="Password" autocorrect="off" value="">
                <div id="captchaDiv"></div>
        </div>

我的代码:

Connection.Response loginForm = Jsoup.connect(url).method(Connection.Method.GET)
                                .execute();

Document doc = Jsoup.connect(url).data("sessionId", "IyLZEAs5n9RP").data(".tries", "1").data(".src", ".spt").data(".md5", "").data(".hash", "").data(".js", "").data(".last", "").data("promo", "").data(".intl", "us").data(".lang", "en-US").data(".bypass", "").data(".partner", "").data(".u", "515l00ha52emg").data(".v", "0").data(".challenge", "HupRQ9x1ptIRHP1H8P9eYBbAlofE4YsoSQ--").data(".yplus", "").data(".emailCode", "").data("pkg", "").data("stepid", "").data(".ev", "").data("hasMsgr", "0").data(".chkP", "Y").data(".done", "http://hockey.fantasysports.yahoo.com/hockey/27381/startingrosters?.scrumb=0").data(".pd", "spt_ver=0&c=&ivt=&sg=").data(".ws", "0").data(".cp", "0").data("nr", "0").data("pad", "6").data("aad", "6")
        .data("login", "MYEMAIL").data("passwd", "MYPASSWORD")
        .cookies(loginForm.cookies()).post();

System.out.println(doc.title());

运行时,它仍会打印登录标题。对于错误的单行格式感到抱歉,但是有很多参数,它们的值与问题无关。我把最后几个参数放在新行上。

查看参数,我可以看到像&#34; sessionId&#34;会议取决于会议。我可以看出这是一个问题。这是否意味着我必须首先保存该特定sessionId的值并将该值传递给我的Jsoup.connect

1 个答案:

答案 0 :(得分:0)

使用表格参数进行硬编码是不够的!您必须从第一页读取参数值,并在下一篇文章中沿用户/传递和cookie传递它们。

希望它有所帮助。

相关问题