Script Bash pour cliquer sur le bouton d'une page HTML

3

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

Le formulaire 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>

Le script que j'ai est:

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

Toute aide ou orientation serait appréciée!

MacMania
la source
1
Quelle URL et quel bouton sur la page voulez-vous cliquer?
user3439894
Le script n'est toujours pas correct. Des idées? @allan
MacMania
Ce script n'est pas correct. Il n'y a pas variable nommé "valeur".
Allan
Je me demande si je modifie le contenu de la question, si je peux obtenir une réponse. Comment utiliser une commande curl pour cliquer sur le bouton de recherche Google sur www.google.com. Je veux finalement que cela soit dans un script de libertinage. Une fois que je peux comprendre un exemple plus simple, je peux le reproduire et l’appliquer à ma question initiale. @allan
MacMania
Vous n'avez jamais répondu à mon commentaire d'il y a un an concernant la variable nommée "valeur". Avant de pouvoir comprendre une réponse publiée ici, vous devez acquérir une compréhension de base des formulaires HTML. S'il-vous-plaît évaluez: w3schools.com/html/html_forms.asp
Allan

Réponses:

3

Vous devriez envisager d'utiliser opensource Sélénium .

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

La disponibilité d'Apache par défaut pour les tests de script exemple 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()
techraf
la source
Je penserai à un meilleur script pour illustrer votre exemple.
techraf
2

Utilisation boucle ( curl ). C'est un outil de ligne de commande qui transfère des données à l'aide de divers protocoles, y compris HTTP. La beauté ici est que vous n’avez pas besoin d’un navigateur graphique; tout sera traité au niveau de la ligne de commande.

Le "bouton" sur lequel vous souhaitez appuyer se trouvera sous une forme ou une autre. Vous pouvez utiliser les outils de développement de Chrome ou Firebug de Firefox pour afficher 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 deviez remplir ce formulaire dans votre navigateur Web et cliquer sur Soumettre, vous enverriez tout ce que vous avez tapé dans la zone de texte et envoyé 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 où il va stocker les données que vous entrez pour être posté. Dans ce cas, lorsque vous tapez votre numéro de téléphone (+12125551212), il attribue cette valeur à téléphone . Quand vous frappez le Soumettre bouton il envoie phone="+12125551212 dans le cadre du POST.

Donc, en utilisant ce que je suppose, c'est le numéro de téléphone que vous voulez soumettre comme valeur pour la variable, en curl, le code ressemblerait à ceci:

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

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

#/usr/bin/bash

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

exit
Allan
la source
1
Conseil: 1) lors de l'ajout d'informations supplémentaires modifier la question initiale et l'ajouter ici. 2) N'utilisez pas d'informations personnelles telles que les numéros de téléphone - masquez-les (par exemple, 212-555-1234). 3) votre script ne ressemble en rien à mon exemple: où se trouve l'adresse du site Web où se trouve le formulaire et où se trouve l'affectation de variable?
Allan
0

Perl est une autre option pour une navigation Web automatisée robuste WWW :: Mécaniser module.

À signaler le spam au service spamcop , J'utilise une combinaison de AppleScript et de Perl. AppleScript interagit avec Mail et récupère le contenu du courrier indésirable, tandis que perl gère la navigation sur le Web.

Voici un exemple de WWW::Mechanize pour soumettre un formulaire à un serveur Web, recherchez un bouton spécifique dans la réponse et cliquez 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;
    }
}
Graham Miln
la source