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

Estoy tratando de escribir un script Bash que abra un navegador, haga clic en un botón HTML en una página web y cierre el navegador después de obtener una respuesta. Necesito que este script sea ejecutable desde la Terminal. Si no es un script de Bash, entonces tal vez sea un script de Python.

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

El guión que tengo es:

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

¡Cualquier ayuda o dirección sería apreciada!

¿En qué URL y botón de la página desea hacer clic?
El guión aún no es correcto. ¿Algunas ideas? @Alano
Ese guión no es correcto. No hay una variable llamada "valor".
Me pregunto qué pasa si cambio el contenido de la pregunta, si puedo obtener una respuesta. ¿Cómo uso un comando curl para hacer clic en el botón de búsqueda de Google en www.google.com? En última instancia, quiero que esto esté en un guión bast. Una vez que puedo entender un ejemplo más fácil, puedo replicarlo y aplicarlo a mi pregunta original. @Alano
Nunca abordaron mi comentario de hace un año con respecto a la variable denominada "valor". Antes de que pueda comprender cualquier respuesta publicada aquí, debe obtener una comprensión básica de los formularios HTML. Revise: w3schools.com/html/html_forms.asp

Respuestas (3)

Debería considerar usar Selenium de código abierto .

Con un complemento de Selenium IDE para Firefox o Chrome, puede grabar sus acciones (abrir una página, hacer clic en un botón), reproducir estas canciones y generar secuencias de comandos de Python o Ruby ricas que puede personalizar y llamar desde CLI.

La secuencia de comandos de muestra que prueba la disponibilidad predeterminada de Apache 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()
Pensaré en un mejor script para ilustrar tu ejemplo.

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á a nivel de línea de comando.

El "botón" que desea presionar se ubicará en algún tipo de forma. Puede usar las Herramientas para desarrolladores en Chrome o Firebug en Firefox para ver el código del formulario. El siguiente es 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ía lo que escribió 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 llamado teléfono que es donde almacenará los datos que ingrese para publicarlos. En este caso, cuando escribes tu número de teléfono (+12125551212) asigna ese valor a teléfono . Cuando presiona el botón Enviar , se envía phone="+12125551212como parte del POST.

Entonces, usando lo que asumo 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 curles una utilidad de línea de comandos, puede colocarla de forma nativa en un script bash:

#/usr/bin/bash

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

exit
Consejo: 1) Al agregar información adicional, edite la pregunta original y agréguela allí. 2) No use información personal como números de teléfono, ofusquelos (es decir, 212-555-1234). 3) su secuencia de comandos no se parece en nada a mi ejemplo: ¿dónde está la dirección del sitio web donde se encuentra el formulario y dónde está la asignación de variables?

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

Para reportar spam al servicio spamcop , utilizo una combinación de AppleScript y perl. AppleScript interactúa con Mail y obtiene el contenido de spam y el lado perl maneja la navegación web.

A continuación se muestra un ejemplo de WWW::Mechanizecómo 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;
    }
}