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

如何编写web浏览器以执行一系列操作?,web,Web,编辑:我不是在找Facebook API!我只是以Facebook为例。我打算让我的浏览器在可能没有API的不同网站上执行操作 比如说,我希望创建一个程序,登录Facebook,查找我的朋友列表,访问他们的每个个人资料,提取每个帖子的日期+文本,并将其写入文件 我知道算法应该如何工作。但我完全不知道如何将我的代码与浏览器本身连接起来 现在我是一名Java程序员,所以我非常想象Java中的pesudo代码将创建一个浏览器对象,然后将当前页面的内容转换为HTML代码,以便可以解析数据。我在下面提供了

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

比如说,我希望创建一个程序,登录Facebook,查找我的朋友列表,访问他们的每个个人资料,提取每个帖子的日期+文本,并将其写入文件

我知道算法应该如何工作。但我完全不知道如何将我的代码与浏览器本身连接起来

现在我是一名Java程序员,所以我非常想象Java中的pesudo代码将创建一个浏览器对象,然后将当前页面的内容转换为HTML代码,以便可以解析数据。我在下面提供了一个我认为应该是什么样子的示例代码

然而,这是我应该做的正确方式吗?如果是,那么在哪里可以找到web浏览器对象?是否有任何解析器可用于“读取”内容?我如何让它执行javascript,比如单击“Like”按钮

或者有其他的方法吗?是否有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);
    }
}
Browser Browser=新浏览器();
browser.gotour(“http://facebook.com");
//以HTML格式检索要分析的页面
HtmlPage facebookCom=browser.toHtml();
//设置用户名和密码
TextField username=facebookCom.getTextField(“用户名”);
TextField password=facebookCom.getTextField(“密码”);
username.setText(“user123”);
password.setText(“password123”);
facebookCom.updateTextField(“用户名”,用户名);
facebookCom.updateTextField(“密码”,password);
//更新HTML内容
setHtml(facebookCom);
//单击登录按钮并等待加载
browser.getButton(“登录”)。单击();
while(browser.isnotload()){
继续;
}
//单击friends按钮并等待加载
browser.getButton(“朋友”)。单击();
while(browser.isnotload()){
继续;
}
//将当前页面(好友列表)转换为HTML代码进行解析
HtmlPage facebookFriends=browser.toHtml();
//检索每个朋友的数据
ArrayList friendList=facebookFriends.getXmlElementToArray(“friend”);
for(XMLElement好友:好友列表){
String id=friend.getId();
//访问朋友的页面
browser.gotour(“http://facebook.com/“+id);
while(browser.isnotload()){
继续;
}
//检索每个帖子的数据
HtmlPage friendProfile=browser.toHtml();
ArrayList friendPosts=friendProfile.getXmlElementToArray(“post”);
BufferedWriter=新的BufferedWriter(新文件(“C:/Desktop/facebook/”+id));
//将每篇文章的日期+文本写入文本文件
for(xmlementpost:friendPosts){
字符串日期=post.get(“日期”);
String text=post.get(“text”);
字符串内容=日期+“\n”+文本;
writer.append(内容);
}
}

我认为你的想法是错误的。你不会真的想写一个程序来通过浏览器删除屏幕。看起来您可以利用facebooks rest api并查询您正在查找的数据。通过rest api获取用户帖子的链接:

您可以从此端点获取其用户id:


然后将用户ID插入链接的第一个rest端点。一旦您通过rest api正确返回数据,将数据写入文件就相当简单了。

他们有用于此目的的api Google“selenium”。您可以使用浏览器自动化工具实现这一点,有效地控制活动的web浏览器并与其中的DOM交互。但是如果你只是想从Facebook上获取信息,为什么不使用他们的API呢?或者至少,编写HTTP请求代码并解析响应。控制手动浏览器来执行自动任务似乎有点不必要。@David,gonephishing:谢谢!但我只是以Facebook为例。我打算对没有API的网站执行此操作。@user2296609:在代码中发出HTTP请求并解析响应(通常称为“抓取网站”)可能仍然是比使用实际的web浏览器更好的方法。谢谢!但我只是以Facebook为例。我打算为没有API的网站这样做。啊,这可能更符合您的要求: