web-dev-qa-db-ja.com

Webフォームに入力するためのスクリプト言語

私はテクノロジー企業でインターンとして働いていますが、Web管理システムにデータを入力するという不運な仕事を与えられました。 Webフォームに入力された情報は、MySQL DBに保存されます。データを受け取ったら、このオンラインフォームを約1000回送信する必要があり、フォームごとに約10の異なるテキストフィールド/チェックボックスで構成されていました。 (言い換えれば、完全に麻痺していると思い、時間とリソースのとんでもない無駄になる、または私は思った...)

これより少し前にデータベースを使用していたので、すぐに対応できるのは、MySQLの短いスクリプトを作成してすべてのデータを一括インポートすることでした。それはあまりにも明白に思われたので、それはある種のテストであったかもしれないと思った。約10行のコードで構成されるスクリプトを作成しましたが、そのスクリプトを実行するためのMySQL管理者権限で信頼できないことが通知されました。したがって、次の考えは、Webフォームから情報を入力するだけのスクリプトを作成することです(これには10倍の時間がかかりますが、これは私がしなければならないことです)。

この性質のスクリプトに慣れていない(ボットに似たものを必要とするようですが、良い種類です)これを行う方法がわかりませんでした。アクセス権のあるWebフォームにデータを入力するために使用する優先言語はありますか?使用するスクリプト言語と、入力する必要のあるデータとそれをペアリングする方法に関しては、これを正しい方向に向けるだけの方法で、私のために特別にこれを探しているわけではありません。

ヘルプ/貴重な入力をありがとう!

編集:

サーバーにファイルを配置するためのアクセス権がなくても、Perlを使用してこれを実行する方法はありますか?

いくつかのJavaScriptループを実行して、データを.csvまたは行区切り文字を含む.txt形式から引き出し、Webフォームに挿入できますか?

5
ityler22

いくつかの可能性があります(私の意見では、それが長期的で再利用可能なコードであることを意図している場合を除いて、最後のものは最も簡単で最も意味があります):

  • Webテストフレームワークを使用する

    彼らはこの種のものを行うことを意図しているので、明らかにそれをうまくやっています。 しかし、あなたがやりたいことには少し重いと思います。たとえば、AdelはSeleniumを推奨しました。また、HtmlUnitなどのブラウザーなしのドライバーを使用する新しいWebDriverベースのAPIを使用する場合を除いて、ブラウザーを起動します。

    そのため、この方法を使用する場合は、HtmlUnit(Javaプログラムまたは他のJVMベースの言語から呼び出すことができます)のようなものを使用することをお勧めします。 Groovy、Scala、Clojure ...)でも、これは比較的重いと思います。

  • 汎用のスクリプト言語を使用する

    Python、Perl、およびその他の群れを使用すると、これを最初からすばやく作成したり、既存のライブラリを再利用して独自のHTTPクライアントを実装してPOSTリクエストを送信したりできます。

    この考えが将来も維持されるのであれば、Pythonを使用します。それが速くて汚いものになるなら、Perlはハッカーの親友です(そしてCPANはお気に入りのハンマーです)。

  • シェルのスクリプトをそのまま使用し、curlなどを使用します

    さらに最小限に:入力を処理してデータをフォーマットするための裸のシェルスクリプト、サーバーへのcurlへのPOST呼び出し、そして出来上がり!

    あなたがWindowsを使っているなら、Powershellはあなたの友達になるでしょう。


これを行うには他に何百もの可能性がありますが、私が思いついたものと私が使用するものについてはほとんど言及しません。

それが私の仕事だったとしたら、おそらく次のような醜いコマンドラインを書くでしょう。

  • 単純なスプレッドシートの場合(セル値を選択する必要がない場合):

    1. .xlsを.csvに変換し、
    2. データを変換するのに適したものにパイプして、
    3. それをPOSTのcurlコマンドにパイプします。
  • それが複雑なスプレッドシートの場合(セル値をチェリーピックする必要がある場合):

    • データ抽出ビットをスクリプト化し、
    • curlを呼び出すか、スクリプト言語の組み込みライブラリを使用してPOSTします。

次の場合にのみ、より高度なテストフレームワークを使用します。

  • さまざまなデータ形式に対してこれをもう一度行うように求められる可能性があります。
  • さまざまなデータソースとターゲットDBについて、これをもう一度行うように求められる可能性があります。
  • 私は頻繁にこれを行うように求められる可能性があります。

その場合、保守性と拡張性の観点から、より設計されたアプローチが理にかなっています。


すべての場合において、そのスクリプトをバックアップして渡すこと、およびそれを文書化して(READMEで十分です)、usageを実装することを忘れないでください。持っている場合は、SCMでバージョン管理します。


注:「直接SQL」アプローチよりもWebフォーム送信アプローチを採用する方がよいもう1つの理由は、フォームを受信するサーバーが、現時点では認識していない追加のチェックを実行している可能性があるためです。

それが事実であるとは言わないが、おそらくセキュリティだけが理由ではなかった。

頑張ってください。


編集:これに「PHP」というタグを付けたことに気づきました。コードがサーバー側であることを暗示するので、理由は本当にわかりません(まあ、あらゆる種類のスクリプトでPHPを使用できますが、なぜこれを自分で行うのですか?)

8
haylem

ヘイレムの答えは最良のオプションのセットを提供すると思います。そうは言っても、Windowsプラットフォームの場合は Autohotkey について触れておきます。まともなスクリプト言語ですが、GUIタスクの自動化には非常に強力です。

データを直接投稿するのが最善の方法であることに同意しますが、これが簡単に機能しない状況もあります。たとえば、管理システムにログインが必要で、クライアント側の状態を使用して何らかの認証チケットを追跡する場合などです。ヘッドレスHTTPを使用してこれを確実にエミュレートできますが、問題がさらに複雑になります。ある時点で、ブラウザを直接操作する方が簡単になる場合があります。これにはオートホットキーが適しています。これは単なるスクリプト言語なので、Seleniumほど重くはなく、他の無関係なタスクにも役立ちます。

0
Bryan

まず、あなたの態度を少し変えるべきでしょう。あなたは「不幸な仕事を与えられた」と言います-なぜですか?つまり、ここで貴重なレッスンを学ぶことができます。さらに、あなたはインターンです。それは素晴らしい仕事です、そしてそれは「汚い」仕事を伴います。

うーん、チェックアウトすることをお勧めするかもしれません Selenium 。 Web機能を自動化する必要がある場合は、Seleniumを使用すると非常に便利です。

0
Adel