Написание простого веб-сканера, взаимодействующего с браузером (Java) - PullRequest
2 голосов
/ 13 июля 2010

Мне нужно создать автоматизированный процесс (предпочтительно с использованием Java), который будет:

  1. Открыть браузер с определенным URL-адресом.
  2. Войдите в систему, используя указанные имя пользователя и пароль.
  3. Перейдите по одной из ссылок на странице.
  4. Обновите браузер.
  5. Выйти.

В основном это делается для сбора статистики заанализ.Каждый раз, когда пользователь переходит по ссылке, для этого конкретного пользователя генерируется набор данных и сохраняется в базе данных.Мне нужно, чтобы около 10 поддельных пользователей пинговали страницу каждые 5-15 минут.

Можете ли вы вспомнить простой способ сделать это?Должна быть альтернатива бесконечному ручному процессу входа-обновления-выхода из системы ...

Ответы [ 4 ]

5 голосов
/ 13 июля 2010

Попробуйте Селен .

1 голос
/ 13 июля 2010

Это не Java, а Javascript.Вы можете сделать что-то вроде:

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

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

...

и т. Д.

С такой структурой вы можете легко покрыть 1-3.Добавьте несколько циклов для обновления страницы, и все готово.

1 голос
/ 13 июля 2010

Используйте HtmlUnit , если хотите

  1. БЫСТРО
  2. ПРОСТО

веб-взаимодействие / сканирование на основе 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.refresh () для любого объекта Page.

0 голосов
/ 13 июля 2010

Вы можете использовать Джакарта JMeter

...