Java 如何使用JSoup导航页面

Java 如何使用JSoup导航页面,java,android,post,jsoup,Java,Android,Post,Jsoup,我正在开发一个android应用程序,它解析html页面并使用其元素,然后转到下一个页面并提取其元素。我以前用Selenium做过这项工作,但当我用Android时,它占用了太多内存,应用程序停止响应。现在我被困在登录页面,在那里我必须输入用户名和密码。我设法做到了,但我无法进入下一页。它返回相同的登录页面,而不是下一个。我真的需要用JSoup来实现这一点,因为最终代码必须与android应用程序代码集成。救命啊 try { String url = "http://sla

我正在开发一个android应用程序,它解析html页面并使用其元素,然后转到下一个页面并提取其元素。我以前用Selenium做过这项工作,但当我用Android时,它占用了太多内存,应用程序停止响应。现在我被困在登录页面,在那里我必须输入用户名和密码。我设法做到了,但我无法进入下一页。它返回相同的登录页面,而不是下一个。我真的需要用JSoup来实现这一点,因为最终代码必须与android应用程序代码集成。救命啊

 try {


        String url = "http://slateisb.nu.edu.pk/portal";
        Document doc = Jsoup.connect(url).
                followRedirects(true).
                data("eid", "i110013").
                data("pw", "001").
                method(Method.POST).get();
        String title = doc.title();
        print("Title : %s" , title);

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
import java.util.Map;
导入org.jsoup.Connection;
导入org.jsoup.Connection.Method;
导入org.jsoup.jsoup;
导入org.jsoup.nodes.Document;
公共班机{
公共静态void main(字符串[]args){
试一试{
//在此url中,您必须登录
字符串loginUrl=”http://slateisb.nu.edu.pk/portal/xlogin";
//这是一个例子,它可以是其他任何东西
字符串url=”http://slateisb.nu.edu.pk/portal";
//第一次登录,带上cookies
Connection.Response res=Jsoup
.connect(loginUrl)
.数据(“eid”、“i110013”)
.数据(“pw”、“001”)
.推荐人(”http://www.google.com")
.用户代理(
“Mozilla/5.0(Windows;U;WindowsNT 5.1;en-US;rv1.8.1.6)Gecko/20070725 Firefox/2.0.0.6”)
.method(method.POST).timeout(0.execute();
Map loginCookies=res.cookies();
//现在你可以解析任何你想要的页面,只要你传递cookies
文档doc=Jsoup
.connect(url)
.超时(0)
.cookies(loginCookies)
.推荐人(”http://www.google.com")
.用户代理(
“Mozilla/5.0(Windows;U;WindowsNT 5.1;en-US;rv1.8.1.6)Gecko/20070725 Firefox/2.0.0.6”)
.get();
System.out.println(“Title:+doc.Title());
}捕获(例外e){
e、 printStackTrace();
}
}
}

Two shot in dark:设置一个模仿浏览器的用户代理;首先获取登录页面,并将服务器在您的登录请求中设置的任何cookie传递给您。(此外,如果这些是您的用户名和密码,您可能希望将其编辑掉,并标记版主以编辑旧版本。)我是JSoup的新手,请详细说明。。(您可能希望使用完整浏览器的用户代理,而不仅仅是“Mozilla”)。从连接获取cookie。使用方法响应,并在连接上使用cookie(String,String)方法设置它们。这应该是足够的指针,让你解决其余的问题。工作完美,非常感谢!问题。用户代理做什么?它也能在安卓系统上工作吗?是的。每个浏览器都会发送标识它的标题。因此,当您通过bot(机器)访问/解析页面时,您必须模仿相同的行为,因为某些服务器不允许缺少这些头。
import java.util.Map;

import org.jsoup.Connection;
import org.jsoup.Connection.Method;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class Main {

    public static void main(String[] args) {
        try {
            //In this url you must login
            String loginUrl = "http://slateisb.nu.edu.pk/portal/xlogin";

            //This is an example, it can be anything else
            String url = "http://slateisb.nu.edu.pk/portal";

            //First login. Take the cookies
            Connection.Response res = Jsoup
                    .connect(loginUrl)
                    .data("eid", "i110013")
                    .data("pw", "001")
                    .referrer("http://www.google.com")
                    .userAgent(
                            "Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .method(Method.POST).timeout(0).execute();

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

            //Now you can parse any page you want, as long as you pass the cookies
            Document doc = Jsoup
                    .connect(url)
                    .timeout(0)
                    .cookies(loginCookies)
                    .referrer("http://www.google.com")
                    .userAgent(
                            "Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .get();

            System.out.println("Title : " + doc.title());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}