2012-04-14 7 views
3

Jsoupを使用して、ログインしたときにのみ使用できるページをクロールしたいと思います。これは、1ページにサインインして別のページにCookieを送信する必要があることを意味します。
私はいくつかの以前の記事hereを読み、次のコードを記述します。Jsoupを使用してサインインしてデータをクロールする

public static void main(String[] args) throws IOException { 
    Connection.Response res = Jsoup.connect("login.yahoo.com") 
     .data("login", "myusername", "passwd", "mypassword") 
     .method(Method.POST) 
     .execute(); 

Document doc=res.parse(); 
String sessionId = res.cookie("SESSIONID"); 

Document doc2 = Jsoup.connect("http://health.groups.yahoo.com/group/asthma/messages") 
     .cookie("SESSIONID", sessionId) 
     .get(); 

Elements Eles=doc2.getElementsByClass("message"); 

String content=Eles.first().text(); 

System.out.println(content); 

私の質問は、私は私のログイン情報を送信するためにここに私のクッキーの名前(すなわち「SESSIONID」)を知ることができる方法ですか?私はそれらを1つずつ試してみました
PH
Y
F

B
DK
YM
T:私は、ログインページから、すべてのクッキーを取得するために.cookies()メソッドを使用しました1つではなく、どれも働かなかった。私はいくつかのセッションIDを得ることができましたが、2番目のページからノードを正常に取得できませんでした。つまり、ログインに成功しなかったことを意味します。どうもありがとう!私はあなたがこの問題のために働く願う

Connection.Response res = Jsoup.connect("https://login.yahoo.com/config/login?") 
    .data("login", "myusername", "passwd", "mypassword") 
    .method(Method.POST) 
    .execute(); 

Map<String, String> cookies = res.cookies(); 

Connection connection = Jsoup.connect("http://health.groups.yahoo.com/group/asthma/messages"); 

for (Map.Entry<String, String> cookie : cookies.entrySet()) { 
    connection.cookie(cookie.getKey(), cookie.getValue());  
} 

Document doc= connection.get(); 
// #code selector 
// Example 
// Element e=doc.select(".ygrp-grdescr").first(); 
// System.out.println(e.text()); // Print => This list will be for asthmatics, and anyone whose  life is affected by it. Discussions include causes, problems, and treatment 

+0

Yahooには多くのCookieがあり、httpsでのログインやその他のセキュリティの影響があります。 – vikiiii

答えて

2

は、あなたがこのような何かをしようとしています。

7

Iveはjsoupでウェブサイトにログインする際に苦労しました。

私が思いついたのは、セレンのwebdriverとjsoupのハイブリッドでした。

Webdriverはブラウザをリモートコントロールできます。通常、これはテスト目的で使用されます。

私のアプリケーションでは、ブラウザを表示させて画面をめちゃくちゃにするのは好ましくありませんでした。だから私は "サイレント"ウェブドライバを使用しました:代わりにHtmlUnitDriver。私が使用してWebサイトにログインするために今すぐ

HtmlUnitDriver driver = new HtmlUnitDriver(true); // true meaning javascript support (Using rhino i be leave) 

:あなたは、このコード行を使用してインスタンス化することができます

String baseUrl = "http://www.thesite.com"; 

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

driver.get(baseUrl); 

driver.findElement(By.id("TextBoxUser")).clear(); 
driver.findElement(By.id("TextBoxUser")).sendKeys("username"); 
driver.findElement(By.id("TextBoxPass")).clear(); 
driver.findElement(By.id("TextBoxPass")).sendKeys("password"); 
driver.findElement(By.id("Button1")).click(); 

ページの内容を取得します。jsoupを使用して

String htmlContent = driver.getPageSource(); 

スタート:

Document document = Jsoup.parse(htmlContent); 

これは悪い私のために素晴らしい。

Steffn Otto Jensen

+0

私が追加したいことの一つは、通常のセレンのものに加えて、 'HtmlUnitDriver'のjarファイルを追加してください。それ以外は、Jsoupとの6時間の不満の後で、これは大変感謝しています。これは命の恩人でした – Tiberiu

関連する問題