5

テキストである引数を取り、特定の Web サイトへの接続を開き、フィールドの ID を使用して引数をテキスト フィールドに入力するスクリプトを作成したいと考えています。これは可能ですか?どうすればいいですか?私は完全なシェル初心者です

編集:

正確な流れ:

- start script with string
- input string into text field on web page
- click form button
- wait for processing
- click hyperlink
4

4 に答える 4

5

入力する必要があるフィールドが正確にわかっている場合は、 を使用してこれを行うことができますlynxS入力引数としてスクリプトを使用して文字列を取得するとします。lynx次に、その動作をガイドするコマンド スクリプトを作成します。

たとえば、S=fooあなたのフィールドが Web ページの 2 番目のフィールドであるとします。その後、さらに 2 つのフィールドがあり、次に送信ボタンがあります。その後、ページが読み込まれるのを待って、ハイパーリンクをクリックします (その後、終了します)。Web ページは www.something.com です。

コマンド スクリプトはファイル bar.txt にあります。

key <tab> //get to first field
key <tab> //get to second field
key f     //input f
key o     //input o
key o     //input o
key <tab> //get to third field
key <tab> //get to fourth field
key <tab> //get to sumbit button
key ^J    //click submit and wait for load
key <tab> //get to hyperlink
key ^J    //click hyperlink and wait for load
key Q     //exit
key y     //confirm exit

メインコマンドは次のようになりますlynx www.something.com -accept_all_cookies -cmd_script=bar.txt

あとは、入力文字列を動的に作成するだけです。

#!/bin/bash
script=bar.txt
input=$1
webpage=www.something.com
len=${#input}
echo 'key <tab>' > $script
echo 'key <tab>' >> $script
for i in `echo $input|fold -w1` 
do
    echo 'key '$i >> $script
done
echo 'key <tab>' >> $script
echo 'key <tab>' >> $script
echo 'key <tab>' >> $script
echo 'key ^J' >> $script
echo 'key <tab>' >> $script
echo 'key ^J' >> $script
echo 'key Q' >> $script
echo 'key y' >> $script

lnyx $webpage -accept_all_cookies -cmd_script=bar.txt

あとは、スクリプトを保存し、実行可能に変更して呼び出すだけです。./script your_string

于 2012-09-12T11:30:56.643 に答える
5

まず、地元の食堂に今日のランチを注文するスクリプトを次に示します。

URL="https://lunch.com/lunch/cgi-bin/order.cgi"

O="order=Order"
A="amount_%d=%%d&amount_foil_container_%d=%%d"

function order_lunch() {
  if [[ -n "$@" ]]; then
    curl -u "$USER":"$PASSWORD" \
         -d $(printf $(printf "$O&$A&$A&$A&$A" 0 0 1 1 2 2 3 3) \
                     "${@:2:8}") \
         "$URL";
  else
    echo "Nothing to order.";
  fi;
}

入力は次の形式の文字列です

2012-08-23 1 0 0 0 0 0 0 0

ここで、各フィールドは異なる料理を表します。つまり、日付の後の最初の位置にある 1 は「1 パスタ」です。

幸運を。

于 2012-09-12T11:31:36.300 に答える
2

... 「特定の Web サイトへの接続を開き、フィールドの ID を使用して引数をテキスト フィールドに入力します」 ...

HTML を入力して送信したいということです<form> ... </form>ね。

curl (http://curl.haxx.se/) を使用します。curl を使用すると、HTTP POST リクエストを非常に簡単に自動化できます。たとえば、次の形式の Web サイトがあるとします (抜粋: http://curl.haxx.se/docs/httpscripting.html )。

<form method="POST" action="junk.cgi">
      <input type=text name="birthyear">
      <input type=submit name=press value=" OK ">
</form>

このコマンドは、フォームに入力して送信します (フォームがhttp://www.example.com/when.cgiで利用できると仮定しましょう):

curl --data "birthyear=1905&press=%20OK%20" http://www.example.com/when.cgi
于 2012-09-12T12:43:21.663 に答える
0

これを試みる前に、まずフォームを理解する必要があると思います。

つまり、フォームのすべての値を含む thml ファイルをローカルで再現できます。フォーム アクションは、ステップ 3 と 4 の終了 URL にすることができます。自動送信 Java スクリプトも調べてください。

フォームが送信された後の最終的なハイパーリンク - 最後のステップで投稿の結果を解析し、curl または wget またはクリックとして機能するものを使用する場合

E2A bashスクリプトの問題は、フォームを作成するという私の上記の概念です.javaスクリプトコマンドラインブラウザまたはlinks/lynx/wget/curlなどを実行するのは難しいからです。

最初の質問は、フォームが get と post の両方をサポートしているかどうかです。フォーム アクションが post しかできない場合、フォーム フィールドを変数として送信することはできません。

http://destinatio-form-url.com/acceptform.cgi?user=something&address=something_else

上記の例は、get がサポートされている場合にフォームの値を生成する方法ですが、投稿する必要がある場合は、その URL にアクセスするために post に設定されたフォーム アクションでフォームを生成する必要があります。形。

上記の形式で送信できると仮定する場合、注意すべきことは、クリック可能なリンクの応答が別のクリックでどこにあるかです-ただし、送信されたのと同じページに返される場合は問題を確認できます-それは特定の何かをgreppingし、起動した正確なURLを取得するまでgrepping/awkingすることで、htmlを解析するのは非常に簡単です。

ここで私の答えを見てください

Webページにログインするためのbashスクリプト

これは、Java認証でCookieを取得してから、ログインユーザーとして進行する方法です。フォームを投稿するために必要なものはすべてあります

私が言っているのは、bashで可能ですが、URL処理については、これを行うためのすべてのライブラリを提供し、あらゆる種類のシステムコマンドを呼び出すよりもエレガントにするより良い言語で行われる可能性があるということです

与えられた例は Java ですが、perl、php、python などの任意の言語である可能性があり、Perl は Google で LWP html を検索し、LWP HTML パーサーなどの多くの特定のライブラリを検索するため、すべてこのタスク用のライブラリが必要です。あなたが使用できる

とにかく万全

リンクが役立つ場合、リンクはJavaスクリプトをサポートしていると思います..

それはlynxに似ていますが、より多くのアドオンがあります

    apt-cache search links|grep browser
amule-gnome-support - ed2k links handling support for GNOME web browsers
elinks - advanced text-mode WWW browser
elinks-data - advanced text-mode WWW browser - data files
elinks-doc - advanced text-mode WWW browser - documentation
elinks-lite - advanced text-mode WWW browser - lightweight version
libhtmlunit-core-js-java - GUI-Less browser for Java programs - JavaScript engine
libhtmlunit-java - GUI-Less browser for Java programs
libjenkins-htmlunit-java - Jenkins branch of HtmlUnit browser testing for web apps
libphp-snoopy - Snoopy is a PHP class that simulates a web browser
links - Web browser running in text mode
links2 - Web browser running in both graphics and text mode
man2html - browse man pages in your web browser
surf - simple web browser
于 2012-09-12T11:21:27.367 に答える