Écrire un robot d'exploration Web simple qui interagit avec le navigateur (Java)


J'ai besoin de créer un processus automatisé (de préférence en utilisant Java) qui:

  1. Ouvrez le navigateur avec une URL spécifique.
  2. Connexion, en utilisant le nom d'utilisateur et le mot de passe spécifiés.
  3. Suivez l'un des liens sur la page.
  4. Actualisez le navigateur.
  5. Déconnexion.

Ceci est essentiellement fait pour recueillir des statistiques pour l'analyse. Chaque fois qu'un utilisateur suit le lien, un tas de données est généré pour cet utilisateur particulier et enregistrés dans la base de données. La chose dont j'ai besoin pour ce faire, en utilisant environ 10 faux utilisateurs, ping la page toutes les 5-15 min.

Pouvez-vous bricoler une façon simple de le faire? Il doit y avoir une alternative au processus manuel de connexion-actualisation-déconnexion sans fin...

Author: Jurek Kozyra, 2010-07-13

4 answers

EssayezSelenium .

 5
Author: Aaron Digulla, 2010-07-13 09:27:46

Ce n'est pas Java, mais Javascript. Vous pourriez faire quelque chose comme:

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

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

...

Etc

Avec ce type de structure, vous pouvez facilement couvrir 1-3. Ajoutez des boucles for pour les actualisations de page et vous avez terminé.

 1
Author: sawu, 2010-07-13 09:52:47

Utiliser interface htmlunit si vous voulez

  1. RAPIDE
  2. SIMPLE

Interaction web basée sur Java/exploration.

Par exemple: voici un code simple montrant un tas de sortie et un exemple d'accès à tous les éléments IMG de la page chargée.

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

Exemple #2 Accéder aux champs de saisie nommés et entrer des données / cliquer sur:

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:, Vous pouvez utiliser la page.refresh() sur n'importe quel objet Page.

 1
Author: Syntax, 2010-07-13 10:27:48

Vous pouvez utiliser Jakarta JMeter

 0
Author: Redlab, 2010-07-13 09:27:54