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!
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()
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="+12125551212
como 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 curl
es 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
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::Mechanize
có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;
}
}
usuario3439894
Macmanía
Alano
Macmanía
Alano