5 votes

Bash script pour cliquer sur un bouton dans une page HTML

J'essaie d'écrire un script Bash qui ouvre un navigateur, clique sur un bouton HTML sur une page web, et ferme le navigateur après avoir obtenu une réponse. J'ai besoin que ce script soit exécutable depuis Terminal. Si ce n'est pas un script Bash, alors peut-être un script Python.

La forme est :

<form method="post" action="duophones?yc=sasv1S2f8mXKITRJS1XrenZ30SA-" enctype="application/x-www-form-urlencoded"> 
<input name="phone" value="+15551231235" type="hidden">
<input name="action" value="dapact" type="hidden">
<input name="session" value="0" type="hidden">
<button class="c01 c01v0" name="action" type="submit" value="Activate +15551231234 over SMS (recommended)" override="true">Activate +15551231234 over SMS (recommended)</button> 
</form>

script que j'ai est :

curl -d value="Activate +15551231234 over SMS (recommended)" www.testpage.com

Toute aide ou orientation serait appréciée !

6voto

techraf Points 3610

Vous devriez envisager d'utiliser des logiciels libres Sélénium .

Avec un IDE Selenium pour Firefox ou Chrome, vous pouvez enregistrer vos actions (ouvrir une page, cliquer sur un bouton), rejouer ces morceaux, et générer des scripts Python ou Ruby riches que vous pouvez personnaliser et appeler à partir de CLI.

Un exemple de script testant la disponibilité par défaut d'Apache pourrait ressembler à ceci :

#!/usr/local/bin/python

DEST_URL='http://webserver.dev/'

import unittest
from selenium import webdriver
from selenium.webdriver.common.proxy import *

class WebInterfaceTest(unittest.TestCase):

  def setUp(self):
     self.driver = webdriver.Firefox()

  def tearDown(self):
     self.driver.quit()

  def test_web_interface(self):
    self.driver.get(DEST_URL)
    self.assertIn('Apache2 Debian Default Page: It works', self.driver.title)

if __name__ == "__main__":
  unittest.main()

3voto

Douglas Points 10417

Utilisation cURL ( curl ). Il s'agit d'un outil en ligne de commande qui transfère des données à l'aide de divers protocoles, dont HTTP. L'avantage est que vous n'avez pas besoin d'un navigateur graphique ; tout est géré au niveau de la ligne de commande.

Le "bouton" sur lequel vous voulez appuyer se trouve dans une sorte de formulaire. Vous pouvez utiliser les outils de développement dans Chrome ou Firebug dans Firefox pour voir le code du formulaire. Voici un exemple de formulaire avec une seule zone de texte et un bouton d'envoi :

<form action="http://foo.bar/helloworld.html" method="POST">
<input type="text" name="phone"> <br/>
<input type="submit">
</form>

Si vous remplissiez ce formulaire dans votre navigateur web et que vous cliquiez sur "Envoyer", vous enverriez en fait ce que vous avez tapé dans la zone de texte et enverriez la demande au serveur.

La chose importante à noter ici est que le formulaire crée un "champ" de texte appelé téléphone qui est l'endroit où sont stockées les données que vous saisissez pour être publiées. Dans ce cas, lorsque vous saisissez votre numéro de téléphone (+12125551212), il affecte cette valeur à la rubrique téléphone . Lorsque vous appuyez sur la touche Soumettre il envoie phone="+12125551212 dans le cadre du POST.

Ainsi, en utilisant ce que je suppose être le numéro de téléphone que vous voulez soumettre comme valeur de la variable, dans curl, le code ressemblerait à ceci :

curl -d "phone=+12125551212" http://foo.bar/helloworld.html

Depuis curl est un utilitaire en ligne de commande, vous pouvez le mettre nativement dans un script bash :

#/usr/bin/bash

curl -d "phone=+12125551212" http://foo.bar/helloworld.html

exit

0voto

Graham Miln Points 39606

Une autre option pour une navigation automatisée robuste sur le web est le programme perl WWW::Mechanize module.

Pour signaler le spam au service spamcop J'utilise une combinaison d'AppleScript et de perl. AppleScript interagit avec Mail et récupère le contenu des spams, tandis que perl s'occupe de la navigation sur le web.

Vous trouverez ci-dessous un exemple de WWW::Mechanize pour soumettre un formulaire à un serveur web, trouver un bouton spécifique dans la réponse et cliquer sur le bouton :

#!/usr/bin/perl

use WWW::Mechanize;

my $spamcop_url = 'http://www.spamcop.net';

my $mech = WWW::Mechanize->new();
$mech->get( $spamcop_url );

$mech->submit_form(
        form_number => 1,
        fields      => {
            username    => 'ENTER YOUR SPAMCOP USER NAME HERE',
            password    => 'ENTER YOUR SPAMCOP PASSWORD HERE',
        }
    ) ."\n";

my $stop = 0;
while(not $stop) {

    $mech->follow_link( text => 'Report Now' ) ."\n";

    my $form = $mech->form_name( 'sendreport' );
    if ($form) {
        print "Send Report form found: ".$mech->value('reports')."\n";
        $mech->click_button( 'value' => 'Send Spam Report(s) Now' ) ."\n";
    } else {
        print "No report form button found.\n";
        $stop = 1;
    }
}

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X