编写一个与浏览器交互的简单Web爬虫(Java)

时间:2010-07-13 09:24:13

标签: java browser web-crawler bots interaction

我需要创建一个自动化流程(最好使用Java):

  1. 使用特定网址打开浏览器。
  2. 使用指定的用户名和密码登录。
  3. 请按照页面上的其中一个链接。
  4. 刷新浏览器。
  5. 退出。
  6. 这基本上是为了收集一些统计数据进行分析。每次用户跟踪链接时,都会为该特定用户生成一堆数据并保存在数据库中。我需要做的是,使用大约10个假用户,每5-15分钟ping一次页面。

    你能谈谈简单的做法吗?必须有一个替代无尽的login-refresh-logout手动过程...

4 个答案:

答案 0 :(得分:5)

尝试Selenium

答案 1 :(得分:1)

如果需要,请使用HtmlUnit

  1. FAST
  2. SIMPLE
  3. 基于java的网络互动/抓取。

    例如:这里有一些简单的代码,显示了一堆输出以及访问已加载页面的所有IMG元素的示例。

    public class HtmlUnitTest {
      public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
        final WebClient webClient = new WebClient();
        final HtmlPage page = webClient.getPage("http://www.google.com");
        System.out.println(page.getTitleText());
    
        for (HtmlElement node : page.getHtmlElementDescendants()) {
          if (node.getTagName().toUpperCase().equals("IMG")) {
            System.out.println("NAME: " + node.getTagName());
            System.out.println("WIDTH:" + node.getAttribute("width"));
            System.out.println("HEIGHT:" + node.getAttribute("height"));
            System.out.println("TEXT: " + node.asText());
            System.out.println("XMl: " + node.asXml());
          }
        }
      }
    }
    

    示例#2 访问命名输入字段并输入数据/单击:

    final HtmlPage page = webClient.getPage("http://www.google.com");
    
    HtmlElement inputField = page.getElementByName("q");
    inputField.type("Example input");
    
    HtmlElement btnG = page.getElementByName("btnG");
    Page secondPage = btnG.click();
    
    if (secondPage instanceof HtmlPage) {
      System.out.println(page.getTitleText());
      System.out.println(((HtmlPage)secondPage).getTitleText());
    }
    

    NB:您可以在任何Page对象上使用page.refresh()。

答案 2 :(得分:1)

这不是Java,而是Javascript。你可以这样做:

window.location = "<url>"
document.getElementById("username").value = "<email>";    
document.getElementById("password").value = "<password>";

document.getElementById("login_box_button").click();

...

使用这种结构,您可以轻松覆盖1-3。抛出一些用于页面刷新的循环,你就完成了。

答案 3 :(得分:0)

您可以使用Jakarta JMeter