Bash script para hacer clic en el botón en una página HTML

3

Estoy intentando escribir un script Bash que abre un navegador, hace clic en un botón HTML en una página web y cierra el navegador después de recibir la respuesta. Necesito que este script sea ejecutable desde dentro de Terminal. Si no es un script de Bash, entonces quizás un script de Python.

El formulario es:

<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 tengo es:

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

Cualquier ayuda o dirección sería apreciada!

    
pregunta MacMania 28.06.2016 - 01:40

3 respuestas

3

Debería considerar el uso de opensource Selenium .

Con el complemento Selenium IDE en Firefox, puede registrar sus acciones (abriendo una página, haciendo clic en un botón) , vuelva a reproducir estas canciones y genere scripts Python o Ruby que puede personalizar y llamar desde CLI.

La disponibilidad de Apache predeterminada de prueba de secuencia de comandos podría tener este aspecto:

#!/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()
    
respondido por el techraf 28.06.2016 - 02:27
2

Utilice cURL ( curl ). Es una herramienta de línea de comandos que transfiere datos utilizando varios protocolos, incluido HTTP. La belleza aquí es que no necesita un navegador GUI; todo se manejará en el nivel de línea de comando.

El "botón" que desea presionar se ubicará en algún tipo de forma. Puede usar las Herramientas de desarrollo en Chrome o Firebug en Firefox para ver el código del formulario. A continuación se muestra un formulario de ejemplo con un solo cuadro de texto y un botón de envío:

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

Si tuviera que completar este formulario en su navegador web y hacer clic en enviar, básicamente enviará lo que haya escrito en el cuadro de texto y envió la solicitud al servidor.

Lo importante a tener en cuenta aquí es que el formulario crea un "campo" de texto denominado teléfono , que es donde almacenará los datos que ingrese para ser publicado. En este caso, cuando escribe su número de teléfono (+12125551212), asigna ese valor a teléfono . Cuando presiona el botón Enviar , envía phone="+12125551212 como parte del POST.

Entonces, usando lo que supongo es el número de teléfono que desea enviar como el valor de la variable, en curl, el código se vería así:

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

Dado que curl es una utilidad de línea de comandos, puedes ponerla de forma nativa en un script de bash:

#/usr/bin/bash

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

exit
    
respondido por el Allan 28.06.2016 - 07:20
0

Otra opción para una navegación web robusta y automatizada es el módulo WWW :: Mechanize de perl.

Para informar de spam al servicio spamcop , utilizo una combinación de AppleScript y perl. AppleScript interactúa con Mail y obtiene los contenidos de spam y el lado de Perl se encarga de la navegación web.

A continuación se muestra un ejemplo de WWW::Mechanize para enviar un formulario a un servidor web, encontrar un botón específico en la respuesta y hacer clic en el botón:

#!/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;
    }
}
    
respondido por el Graham Miln 18.07.2016 - 11:53

Lea otras preguntas en las etiquetas