Bash скрипт для нажатия кнопки на странице HTML

3

Я пытаюсь написать сценарий Bash, который открывает браузер, нажимает кнопку HTML на веб-странице и закрывает браузер после получения ответа. Мне нужно, чтобы этот скрипт был исполняемым из терминала. Если не сценарий Bash, то, возможно, сценарий Python.

Форма это:

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

Сценарий у меня есть:

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

Любая помощь или направление будут оценены!

MacMania
источник
1
Какой URL и кнопку на странице вы хотите нажать?
user3439894
Сценарий все еще не правильный. Есть идеи? @allan
MacMania
Этот сценарий не является правильным. Здесь нет переменная названный "ценность".
Allan
Интересно, что если я переверну содержание вопроса, смогу ли я получить ответ? Как использовать команду curl, чтобы нажать кнопку поиска Google на www.google.com. В конечном счете, я хочу, чтобы это было написано на ленте. Как только я пойму более простой пример, я смогу воспроизвести его и применить к исходному вопросу. @allan
MacMania
Вы никогда не обращались к моему комментарию год назад относительно переменной с именем «значение». Прежде чем вы сможете понять любой ответ, опубликованный здесь, вы должны получить базовое представление о формах HTML. Пожалуйста ознакомтесь: w3schools.com/html/html_forms.asp
Allan

Ответы:

3

Вы должны рассмотреть возможность использования с открытым исходным кодом Селен ,

С Selenium IDE С помощью плагина к Firefox вы можете записывать свои действия (открывать страницу, нажимать на кнопку), воспроизводить эти песни и генерировать богатые сценарии Python или Ruby, которые можно настраивать и вызывать из CLI.

Пример тестирования скриптов по умолчанию доступности Apache может выглядеть следующим образом:

#!/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()
techraf
источник
Я подумаю о лучшем сценарии, чтобы проиллюстрировать ваш пример.
techraf
2

использование завивать ( curl ). Это инструмент командной строки, который передает данные с использованием различных протоколов, включая HTTP. Прелесть здесь в том, что вам не нужен браузер с графическим интерфейсом; все будет обрабатываться на уровне командной строки.

«Кнопка», которую вы хотите нажать, будет расположена в некоторой форме. Вы можете использовать Инструменты разработчика в Chrome или Firebug в Firefox, чтобы увидеть код формы. Ниже приведен пример формы с одним текстовым полем и кнопкой отправки:

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

Если бы вы заполнили эту форму в своем веб-браузере и нажали кнопку «Отправить», вы в основном отправили бы все, что вы ввели в текстовое поле, и отправили запрос на сервер.

Здесь важно отметить, что форма создает текстовое «поле» с именем Телефон где он будет хранить данные, которые вы вводите для публикации. В этом случае при вводе номера телефона (+12125551212) это значение присваивается Телефон , Когда вы нажмете Отправить кнопка посылает phone="+12125551212 как часть ПОСТА.

Итак, используя то, что я предполагаю, это номер телефона, который вы хотите передать в качестве значения для переменной, в curl код будет выглядеть так:

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

поскольку curl утилита командной строки, вы можете поместить ее в скрипт bash:

#/usr/bin/bash

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

exit
Allan
источник
1
Совет: 1) При добавлении дополнительной информации редактировать Оригинальный вопрос и добавьте его туда. 2) Не используйте личную информацию, например, номера телефонов - запутывайте их (т.е. 212-555-1234) 3) ваш скрипт не похож на мой пример - где находится адрес веб-сайта, где находится форма, и где находится переменная?
Allan
0

Другой вариант для надежного автоматического просмотра веб-страниц - Perl WWW :: Mechanize модуль.

к сообщить о спаме в службу spamcop Я использую комбинацию AppleScript и Perl. AppleScript взаимодействует с Mail и получает содержимое спама, а сторона perl управляет просмотром веб-страниц.

Ниже приведен пример WWW::Mechanize Чтобы отправить форму на веб-сервер, найдите в ответе определенную кнопку и нажмите кнопку:

#!/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;
    }
}
Graham Miln
источник