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

发布于 2024-09-09 09:22:47 字数 306 浏览 7 评论 0原文

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

  1. 使用特定 url 打开浏览器。
  2. 使用指定的用户名和密码登录。
  3. 点击页面上的链接之一。
  4. 刷新浏览器。
  5. 退出。

这样做基本上是为了收集一些统计数据以进行分析。每次用户点击链接时,都会为该特定用户生成一堆数据并保存在数据库中。我需要做的是,使用大约 10 个假用户,每 5-15 分钟 ping 一次页面。

你能考虑一下简单的方法吗?必须有一种替代无休止的登录-刷新-注销手动过程的方法......

I need to create an automated process (preferably using Java) that will:

  1. Open browser with specific url.
  2. Login, using the username and password specified.
  3. Follow one of the links on the page.
  4. Refresh the browser.
  5. Log out.

This is basically done to gather some statistics for analysis. Every time a user follows the link a bunch of data is generated for this particular user and saved in database. The thing I need to do is, using around 10 fake users, ping the page every 5-15 min.

Can you tink about simple way of doing that? There has to be an alternative to endless login-refresh-logout manual process...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

倒带 2024-09-16 09:22:47

它不是Java,而是Javascript。你可以做这样的事情:

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

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

...

等等

通过这种结构,你可以轻松地涵盖 1-3。添加一些 for 循环来刷新页面,就完成了。

It's not Java, but Javascript. You could do something like:

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

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

...

etc

With this kind of structure you can easily cover 1-3. Throw in some for loops for page refreshes and you're done.

小嗷兮 2024-09-16 09:22:47

如果您想要

  1. 快速
  2. 简单的

基于 java 的 Web 交互/爬行,

请使用 HtmlUnit例如:下面是一些简单的代码,显示了一堆输出以及访问已加载页面的所有 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());
}

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

Use HtmlUnit if you want

  1. FAST
  2. SIMPLE

java based web interaction/crawling.

For example: here is some simple code showing a bunch of output and an example of accessing all IMG elements of the loaded page.

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());
      }
    }
  }
}

Example #2 Accessing named input fields and entering data/clicking:

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: You can use page.refresh() on any Page object.

献世佛 2024-09-16 09:22:47

您可以使用 Jakarta JMeter

You could use Jakarta JMeter

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文