web-dev-qa-db-ja.com

リクエストの「クリック」ボタン

リクエストライブラリをフォームに記入したい、この小さなWebサイトがあります。問題は、フォームデータを入力してボタンを押すと、次のサイトにアクセスできないことです(Enterは機能しません)。

重要なことは、ある種のクリックボットを介してそれを行うことができないことです。これはグラフィックなしで実行できるようにする必要があります。

info = {'name':'JohnJohn',
        'message':'XXX',
        'sign':"XXX",
        'step':'1'}

最初の3つのエントリの名前、メッセージ、記号はテキスト領域で、ステップはボタンだと思います。

r = requests.get(url)
r = requests.post(url, data=info)

print(r.text)

chromeを介して手動でリクエストを送信すると、フォームデータは次のようになります。

  • 名前:JohnJohn
  • メッセージ:XXX
  • サイン:XXX
  • ステップ1

ボタン要素は次のようになります。

<td colspan="2" style="text-align: center;">
    <input name="step" type="hidden" value="1">
    <button id="button" type="button" onclick="myClick();"
     style="background-color: #ef4023;  width: 80px; font-face: times; font-size: 14pt;">
        Wyślij
    </button>
</td>

これを手動で行うと、次のサイトには同じアドレスがあります。

6
Repcak

投稿した内容を見るとわかるように、ボタンをクリックすると、JavaScriptコード、つまりmyClick()というメソッドがトリガーされます。

Pythonsリクエストライブラリを使用してこれをクリックするのは簡単ではありません。 myClick()の内部で何が起きているかを調べようとすると、もっと運がいいかもしれません。私の推測では、ある時点でPOSTリクエストがHTTPエンドポイントに送信されます。これを理解できる場合は、pythonコードに変換できます。

それが機能しない場合、別のオプションは、Selenium/PhantomJSのようなものを使用することです。このようなツールを使用すると、実際にフォームに入力してボタンをクリックすることができます。 PythonからSelenium + PhantomJSを使用する方法を示しているので、これを見ることができます so answer

フォーラムにスパムを送信したり、[ここに違法またはその他の虐待行為を挿入]することにより、このような方法を乱用しないようにしてください。

13
Dave

スクリプト化されたボタンのリクエストを偽造する必要があるような状況では、JSのロジックを推測するのではなく、物理的なクリックを実行してchrome devtools 'network snifferを調べて、 Pythonで簡単に偽造できる単純なリクエスト

1
fnr