Bash script per fare clic sul pulsante su una pagina HTML

3

Sto provando a scrivere uno script Bash che apre un browser, fa clic su un pulsante HTML su una pagina Web e chiude il browser dopo aver ricevuto la risposta. Ho bisogno che questo script sia eseguibile da Terminal. Se non è uno script Bash, allora forse uno script Python.

Il modulo è:

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

Lo script che ho è:

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

Qualsiasi aiuto o direzione sarebbe apprezzato!

    
posta MacMania 28.06.2016 - 01:40
fonte

3 risposte

3

Dovresti considerare l'utilizzo di opensource Selenium .

Con un plugin Selenium IDE per Firefox puoi registrare le tue azioni (aprire una pagina, fare clic su un pulsante) , riproduce questi brani e genera script Python o Ruby ricchi che puoi personalizzare e chiamare dalla CLI.

Test di script di esempio La disponibilità di Apache predefinita potrebbe essere simile a questa:

#!/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()
    
risposta data 28.06.2016 - 02:27
fonte
2

Utilizza cURL ( curl ). È uno strumento a riga di comando che trasferisce i dati utilizzando vari protocolli, incluso HTTP. La bellezza qui è che non hai bisogno di un browser GUI; tutto verrà gestito a livello di riga di comando.

Il "pulsante" che vuoi premere si troverà in una sorta di forma. Puoi utilizzare gli Strumenti per sviluppatori in Chrome o Firebug in Firefox per visualizzare il codice per il modulo. Di seguito è riportato un modulo di esempio con una singola casella di testo e un pulsante di invio:

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

Se dovessi compilare questo modulo nel tuo browser web e fare clic su Invia, in pratica invierai tutto ciò che hai digitato nella casella di testo e hai inviato la richiesta al server.

La cosa importante da notare qui è che il modulo crea un "campo" di testo chiamato telefono che è dove memorizzerà i dati che inserisci per essere pubblicato. In questo caso, quando digiti il tuo numero di telefono (+12125551212) assegna quel valore a telefono . Quando premi il pulsante Invia invia phone="+12125551212 come parte del POST.

Quindi, usando quello che sto assumendo è il numero di telefono che vuoi inviare come valore per la variabile, in arricciatura, il codice sarà simile a questo:

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

Poiché curl è un'utilità della riga di comando, puoi metterla in modo nativo in uno script bash:

#/usr/bin/bash

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

exit
    
risposta data 28.06.2016 - 07:20
fonte
0

Un'altra opzione per una robusta navigazione web automatica è il modulo WWW :: Mechanize di Perl.

Per segnalare spam al servizio spamcop , utilizzo una combinazione di AppleScript e perl. AppleScript interagisce con Mail e ottiene il contenuto dello spam e il lato perl gestisce la navigazione sul Web.

Di seguito è riportato un esempio di WWW::Mechanize per inviare un modulo a un server Web, trovare un pulsante specifico nella risposta e fare clic sul pulsante:

#!/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;
    }
}
    
risposta data 18.07.2016 - 11:53
fonte

Leggi altre domande sui tag