3

我想用来Jsoup抓取一个只有在我登录时才可用的页面。我想这意味着我需要在一个页面上登录并将cookies发送到另一个页面。我在这里
阅读了一些较早的帖子并编写了以下代码:

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()方法从登录页面获取所有cookie:

B
DK
YM
T
PH
Y
F

我一一尝试,但都没有奏效。我可以从其中一些获取 sessionId,但是我无法从第二页成功获取节点,这意味着我没有成功登录。有人能给我一些建议吗?非常感谢!

4

2 回答 2

7

我也很难用 jsoup 登录网站。

我想出的是 selenium webdriver 和 jsoup 的混合体。

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

对于我的应用程序,不希望让浏览器可见并在屏幕上乱七八糟。所以我改用了“静默”的网络驱动程序:HtmlUnitDriver。您可以使用以下代码行实例化它:

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

获取页面内容:

String htmlContent = driver.getPageSource();

开始使用jsoup:

Document document = Jsoup.parse(htmlContent);

这对我很有用。

史蒂芬·奥托·詹森

于 2013-06-22T23:01:35.800 回答
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

我希望你这对你的问题有用。

于 2012-04-21T02:48:04.633 回答