我想用来Jsoup抓取一个仅在我登录时才可用的页面.我想这意味着我需要在一个页面上登录并将cookie发送到另一个页面.
我在这里阅读了一些早期的帖子并编写了以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
我的问题是如何知道我的cookie名称(即"SESSIONID")在这里发送我的登录信息?我使用该.cookies()方法从登录页面获取所有cookie:
B
DK
YM
T
PH
Y
F.
我一个接一个地尝试过,但都没有用.我可以从其中一些获得sessionId,但是我无法从第二页成功获取节点,这意味着我没有成功登录.有人能给我一些建议吗?非常感谢!
我之前看过这个问题并且看过很多回答"有一个facebook api"是的我完全清楚有一个facebook api但是我不想用它.我正在制作一个可以登录网站并发布的Android应用程序,我只是用一个facebook示例来说明我的问题
我在java中有这个代码
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class testingjsoup {
public static void main(String[] args ){
try {
Connection.Response res = Jsoup.connect("https://www.facebook.com/login.php?login_attempt=1")
.data("email", "myemailid", "pass", "mypassword")
.method(Method.POST)
.execute();
// Document doc = res.parse();
//String sessionId = res.cookie("SESSIONID");
Map<String, String> cookies = res.cookies();
Document doc2 = Jsoup.connect("https://www.facebook.com/")
.cookies(cookies)
.get();
System.out.println(doc2.text());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
Run Code Online (Sandbox Code Playgroud)
现在这一切看起来都很好,除了打印输出显示facebook说"javascript未启用"
谢谢
代码更新以及问题:P
编辑:似乎jsoup不支持javascript ...所以寻找替代品...再次html单元不能与Android工作,我不是在寻找一个网络驱动程序我正在寻找一种无形的方式来浏览网页并返回具体结果
我写了一个网络爬虫,它用 keyward 抓取网站,但我想登录到我指定的网站并按关键字过滤信息。如何实现。到目前为止,我已经发布了我的代码。
public class DB {
public Connection conn = null;
public DB() {
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test";
conn = DriverManager.getConnection(url, "root","root");
System.out.println("conn built");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public ResultSet runSql(String sql) throws SQLException {
Statement sta = conn.createStatement();
return sta.executeQuery(sql);
}
public boolean runSql2(String sql) throws SQLException {
Statement sta = conn.createStatement();
return sta.execute(sql);
}
@Override
protected void finalize() throws Throwable {
if (conn != …Run Code Online (Sandbox Code Playgroud) 我尝试登录这里:http://www.gszi.sulinet.hu/dinaweb/diakok/belepes.jsp :
Connection.Response loginForm = Jsoup.connect("http://www.gszi.sulinet.hu/dinaweb/diakok/belepes.jsp")
.method(Connection.Method.GET)
.execute();
Document doc = Jsoup.connect("http://www.gszi.sulinet.hu/dinaweb/diakok/belepes.jsp")
.data("name","myid")
.data("name","mycode")
.cookies(loginForm.cookies())
.post();
Run Code Online (Sandbox Code Playgroud)
之后,获取我必须登录的页面的html,我意识到我无法登录.有没有办法登录然后获取我现在可以访问的页面的HTML?任何链接,建议或帮助表示赞赏.