3

requests ライブラリを使用してデータを django アプリに送信する python スクリプトがあります。次に、ユーザーは Web ページに切り替えて、編集フォームを取得するボタンをクリックして追加情報を追加します。

リクエストがステータス コード 200 を受け取った直後に、ユーザーが毎回手動で行うのではなく、Web ページに切り替えてボタンを自動的にクリックするようにしたいと考えています。

Selenium の使用を検討しましたが、やり過ぎのようです。どうすればこれを行うことができますか?

編集

現在のプロセスは次のようになります。

  • ユーザーはクライアント側でスクリプトを実行します
  • スクリプトが実行され、静的データが収集されます
  • スクリプトはリクエストを使用してポストとしてデータを送信します
  • データは「レポート」と呼ばれるモデルに保存され、「パブリック」と呼ばれるブールフィールドは False としてマークされます
  • ユーザーが Web アプリに切り替える
  • ユーザーが ajax 呼び出しを行うボタンをクリックし、そのレポートの編集フォームをフェッチします (ログインしているユーザーのユーザー名を比較することで、送信者があなたであることを認識します)。
  • ユーザーがデータを追加して保存する
  • フィールド "public" が True に変わり、誰もがレポートを見ることができます。

これのほとんどは機能しています。手動で行うのではなく、スクリプトが自動的に Web ページに切り替えてボタンをクリックするようにしたいだけです。これが少し複雑であることはわかっていますが、物事をよりよく説明してくれることを願っています

また、Web ブラウザーとして Windows と Chrome を使用しています。

2 回目の編集

そこで、ちょっとしたデモを作って遊んでみました。次のような「test.html」という名前のファイルを作成しました。

<html>
    <head>
        <title>Test</title>
        <script type='javascript/text' src='jquery.js' ></script>
    </head>
<body>
    <div class="container">
        <button id="button1"> Fake </button>
        <button id="button2"> Fake </button>
        <button id="button3"> Real </button>
    </div>


<script>
$(function() {
    $('#button3').on('click', function() {
          alert('you found it!');
    });
});

</script>

</body>
</html>

ご覧のとおり、スクリプトを実行する唯一の方法は、「実際の」ボタンをクリックすることです。これで、画面に表示する python スクリプトを作成できました。

import win32gui

class Window(object):
    def __init__(self, handle):
        assert handle != 0
        self.handle = handle

    @classmethod
    def from_title(cls, title):
        handle = win32gui.FindWindow(title, None) or win32gui.FindWindow(None, title)
        return cls(handle)


chrome = Window.from_title('Test - Google Chrome')

win32gui.SetForegroundWindow(chrome.handle)
win32gui.SetFocus(chrome.handle)

ユーザーが行ったボタンクリックを複製するにはどうすればよいですか? おそらく座標を使用してグラフィカルに行う方法がありますが、それが唯一の方法ですか? そして、ボタンが常に同じ場所にあることをどのように保証しますか? ボタンを使用するよりも良い方法はありますか?

4

1 に答える 1

1

では、ページが開いたときにボタンを自動的にクリックするだけでよいのでしょうか? 特定の状況でのみ自動クリックしたいので、条件の後ろにjavascript/jqueryを隠してください。

def your_view(request):
    # your standard processing
    auto_click = request.GET.get('auto_click', False)
    if auto_click is not False:
        auto_click = True
    render('yourtemplate.html', {'auto_click': auto_click })

次に、テンプレートで次のようにします。

{% if auto_click %}
<script>
$(document).ready(function() {
    $('yourbutton').click();
});
</script>
{% endif %}

ユーザーが Web ページを開いたときに、URL に「?auto_click=1」を追加するだけで、正しい動作が得られます。

于 2013-09-26T22:39:19.317 に答える