Bash-Skript zum Klicken auf eine Schaltfläche auf einer HTML-Seite

Ich versuche, ein Bash-Skript zu schreiben, das einen Browser öffnet, auf eine HTML-Schaltfläche auf einer Webseite klickt und den Browser schließt, nachdem ich eine Antwort erhalten habe. Ich brauche dieses Skript, um in Terminal ausführbar zu sein. Wenn kein Bash-Skript, dann vielleicht ein Python-Skript.

Formular ist:

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

Skript, das ich habe, ist:

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

Jede Hilfe oder Anleitung wäre willkommen!

Auf welche URL und Schaltfläche auf der Seite möchten Sie klicken?
Skript immer noch nicht korrekt. Irgendwelche Ideen? @allan
Dieses Skript ist nicht korrekt. Es gibt keine Variable mit dem Namen "Wert".
Ich frage mich, was passiert, wenn ich den Inhalt der Frage umstelle, wenn ich eine Antwort bekommen kann. Wie verwende ich einen Curl-Befehl, um auf www.google.com auf die Google-Suchschaltfläche zu klicken. Ich möchte letztendlich, dass dies in einem Bast-Skript ist. Sobald ich ein einfacheres Beispiel verstehen kann, kann ich es replizieren und auf meine ursprüngliche Frage anwenden. @allan
Sie sind nie auf meinen Kommentar von vor einem Jahr bezüglich der Variablen mit dem Namen "Wert" eingegangen. Bevor Sie die hier geposteten Antworten verstehen können, müssen Sie sich ein grundlegendes Verständnis von HTML-Formularen aneignen. Bitte überprüfen Sie: w3schools.com/html/html_forms.asp

Antworten (3)

Sie sollten die Verwendung von Open Source Selenium in Betracht ziehen .

Mit einem Selenium-IDE- Plugin für Firefox oder Chrome können Sie Ihre Aktionen aufzeichnen (Öffnen einer Seite, Klicken auf eine Schaltfläche), diese Songs wiedergeben und umfangreiche Python- oder Ruby-Skripte generieren, die Sie anpassen und über die CLI aufrufen können.

Ein Beispielskript zum Testen der standardmäßigen Apache-Verfügbarkeit könnte wie folgt aussehen:

#!/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()
Ich denke an ein besseres Skript, um Ihr Beispiel zu veranschaulichen.

Verwenden Sie cURL ( curl). Es ist ein Befehlszeilentool, das Daten mit verschiedenen Protokollen einschließlich HTTP überträgt. Das Schöne dabei ist, dass Sie keinen GUI-Browser benötigen; alles wird auf Kommandozeilenebene abgewickelt.

Die "Schaltfläche", die Sie drücken möchten, befindet sich in einer Art Formular. Sie können die Entwicklertools in Chrome oder Firebug in Firefox verwenden, um den Code für das Formular anzuzeigen. Im Folgenden sehen Sie ein Beispielformular mit einem einzelnen Textfeld und einer Schaltfläche zum Senden:

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

Wenn Sie dieses Formular in Ihrem Webbrowser ausfüllen und auf „Senden“ klicken, senden Sie im Grunde alles, was Sie in das Textfeld eingegeben und die Anfrage an den Server gesendet haben.

Hier ist es wichtig zu beachten, dass das Formular ein Text-"Feld" namens Telefon erstellt , in dem die Daten gespeichert werden, die Sie eingeben, um gepostet zu werden. Wenn Sie in diesem Fall Ihre Telefonnummer (+12125551212) eingeben, wird dieser Wert phone zugewiesen . Wenn Sie auf die Schaltfläche Sendenphone="+12125551212 klicken, wird sie als Teil des POST gesendet.

Wenn ich also annehme, dass die Telefonnummer, die Sie als Wert für die Variable übermitteln möchten, in curl verwendet wird, würde der Code so aussehen:

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

Da curles sich um ein Befehlszeilenprogramm handelt, können Sie es nativ in ein Bash-Skript einfügen:

#/usr/bin/bash

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

exit
Hinweis: 1) Bearbeiten Sie beim Hinzufügen zusätzlicher Informationen die ursprüngliche Frage und fügen Sie sie dort hinzu. 2) Verwenden Sie keine persönlichen Informationen wie Telefonnummern – verschleiern Sie sie (z. B. 212-555-1234). 3) Ihr Skript sieht nicht so aus wie in meinem Beispiel - wo ist die Website-Adresse, wo sich das Formular befindet, und wo ist die Variablenzuweisung?

Eine weitere Option für robustes automatisiertes Surfen im Internet ist das WWW::Mechanize- Modul von Perl .

Um Spam an den Spamcop-Dienst zu melden , verwende ich eine Kombination aus AppleScript und Perl. AppleScript interagiert mit Mail und erhält die Spam-Inhalte, und die Perl-Seite kümmert sich um das Surfen im Internet.

Unten sehen Sie ein Beispiel, wie WWW::MechanizeSie ein Formular an einen Webserver senden, eine bestimmte Schaltfläche in der Antwort finden und auf die Schaltfläche klicken:

#!/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;
    }
}