假设我想创建一个程序,它将登录Facebook,查找我的朋友列表,访问他们的每个配置文件,提取每个帖子的日期+文本并将其写入文件。
我知道算法应该如何工作。但我完全不知道如何将我的代码与浏览器本身联系起来。
现在我是一名Java程序员,所以我非常想象Java中的pesudo代码是创建一个浏览器对象,然后将当前页面的内容转换为HTML代码,以便可以解析数据。我在下面提供了一个示例代码,我认为它应该是什么样的。
然而,这是我应该做的正确方法吗?如果是,那么我在哪里可以找到Web浏览器对象?有没有我可以用来“阅读”内容的解析器?如何让它执行javascript,例如单击“赞”按钮?
还是有其他办法吗?是否有GUI版本,然后我可以简单地命令程序转到X / Y像素位置并单击某些东西。或者有没有办法直接在我的FireFox中编写代码并从那里运行它?
我真的不知道如何去做这件事。任何帮助将不胜感激!谢谢!
Browser browser = new Browser();
browser.goToUrl("http://facebook.com");
//Retrieve page in HTML format to parse
HtmlPage facebookCom = browser.toHtml();
//Set username & password
TextField username = facebookCom.getTextField("username");
TextField password = facebookCom.getTextField("password");
username.setText("user123");
password.setText("password123");
facebookCom.updateTextField("username", username);
facebookCom.updateTextField("password", password);
//Update HTML contents
browser.setHtml(facebookCom);
// Click the login button and wait for it to load
browser.getButton("login").click();
while (browser.isNotLoaded()) {
continue;
}
// Click the friends button and wait for it to load
browser.getButton("friends").click();
while (browser.isNotLoaded()) {
continue;
}
//Convert the current page (Friends List) into HTML code to parse
HtmlPage facebookFriends = browser.toHtml();
//Retrieve the data for each friend
ArrayList<XMLElement> friendList = facebookFriends.getXmlElementToArray("friend");
for (XMLElement friend : friendList) {
String id = friend.getId();
//Visit the friend's page
browser.goToUrl("http://facebook.com/" + id);
while (browser.isNotLoaded()) {
continue;
}
//Retrieve the data for each post
HtmlPage friendProfile = browser.toHtml();
ArrayList<XMLElement> friendPosts = friendProfile.getXmlElementToArray("post");
BufferedWriter writer = new BufferedWriter(new File("C:/Desktop/facebook/"+id));
//Write the date+text of every post to a text file
for (XMLElement post : friendPosts) {
String date = post.get("date");
String text = post.get("text");
String content = date + "\n" + text;
writer.append(content);
}
}
答案 0 :(得分:1)
我认为你正在以错误的方式思考这个问题。你真的不想写一个程序来通过浏览器废弃屏幕。看起来你可以利用facebooks rest api并查询你正在寻找的数据。通过rest api获取用户帖子的链接:
https://developers.facebook.com/docs/graph-api/reference/v2.6/user/feed
您可以从此终端获取其用户ID:
https://developers.facebook.com/docs/graph-api/reference/friend-list/
然后将用户ID插入已链接的第一个休止端点。一旦你通过其余的api正确地返回数据,将数据写入文件就显得非常简单了。