如何编写Web浏览器以执行一系列操作?

时间:2016-05-20 13:26:22

标签: web

编辑:我不是在寻找Facebook API!我只是以Facebook为例。我打算让我的浏览器在可能没有API的不同网站上执行操作。

假设我想创建一个程序,它将登录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);
    }
}

1 个答案:

答案 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正确地返回数据,将数据写入文件就显得非常简单了。