2014-10-29 148 views
0

我想用Jsoup登錄到網站,然後刮內容。我已經閱讀了一些類似的問題,並認爲我需要做一個POST並傳遞所有輸入參數。我已經這樣做了,但由於某種原因它仍然無法使用。任何幫助不勝感激。使用JSoup登錄之前刮網站

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()); 

運行此,它仍然打印登錄標題雖然。對不起,單行格式不好,但有很多參數,它們的值與問題無關。我把最後幾個參數放在新行上。

看看參數,我可以看到像「sessionId」這樣的東西會因會話不同而不同。我可以看到這是一個問題。這是否意味着我必須先保存該特定sessionId的值並將該值傳遞給我的Jsoup.connect

回答

0

僅對錶單參數進行硬編碼是不夠的!您必須從第一頁讀取參數值,並在用戶/通行證和cookie中的下一篇文章中傳遞它們。

希望它有幫助。