2012-04-14 157 views
3

我想使用Jsoup来抓取仅在我登录时可用的页面。我想这意味着我需要登录一个页面并将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); 

我的问题是我怎么能在这里认识我的cookie的名称(即“SESSIONID”)发送我的登录信息?我用.cookies()方法来获取所有从登录页面饼干:


DK
YM
牛逼
PH
Ÿ
˚F

我想他们一个一个但没有工作。我可以从其中的一些获得sessionId,但是我无法从第二页成功获取节点,这意味着我没有成功登录。任何人都可以给我一些建议吗?非常感谢!

+0

雅虎有很多cookie,通过https执行登录和其他安全隐患。 – vikiiii 2012-04-15 04:05:18

回答

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 

我希望你这适用于您的问题。

7

我一直在用jsoup登录网站。

我想到的是一个硒webdriver和jsoup的混合。

Webdriver可以远程控制浏览器,通常用于测试目的。

对于我的应用程序来说,让浏览器可见并且在屏幕上乱搞是不可取的。所以我使用了“静音”webdriver:HtmlUnitDriver。

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

现在登录到一个网站,我使用:使用jsoup

String htmlContent = driver.getPageSource(); 

开始:

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

获取页面内容,您可以使用此行代码实例化这个

Document document = Jsoup.parse(htmlContent); 

这有工作我很棒。

Steffn Otto Jensen

+0

我想添加的一件事,除了常规硒以外,请确保添加'HtmlUnitDriver'罐。除此之外,非常感谢Jsoup在经历了6个小时的挫折后,这是一个救星 – Tiberiu 2014-10-30 02:00:52