2

Web ブラウザーを開き、ブラウザーでいくつかのテストを実行してから、ブラウザーを閉じる GUI 自動化スクリプトを Python で作成しました。これは、数十万回の反復を繰り返すループで行われます。

プログラムがハングアップし、ブラウザ インスタンスが開かないか、場合によっては最大 20 個のインスタンスが開かれるという問題に遭遇しました。一度に 1 つのブラウザー インスタンスしか開いていないことを確認するエラー チェックを作成したいと考えています (多数のインスタンスが開いている場合は、ブラウザーを完全に強制終了し、反復を再開するか、ブラウザー インスタンスが開いていることを確認してから、ループの反復)。

ブラウザーの PID は、ループの反復ごとに明らかに変化します。私の知る限り、PID を割り当てる方法はありません。私が考えた別の解決策は、ターミナルにシステム コールを作成し、どうにかして tasklist および taskkill コマンドを利用することですが、私がやりたいことを行う方法はまだわかりません。

どんな提案でも大歓迎です!

アップデート:

Windowsプロセスを名前で検索できることは理解していますが、それを次のようなブール式にどのように入れるのですか

if tasklist contains firefox.exe
    taskkill firefox.exe
else
    open firefox

2 回目の更新:

Rubyでコーディングできたのは次のとおりです。

    if system('tasklist | find "firefox.exe"') == true
        a = 1
    elsif system('tasklist | find "firefox.exe"') == false
        a = 0
    end

Pythonでこれをどのように達成しますか?

私が探していた答え:

b = (str(os.system('tasklist | find "firefox.exe"')))
if b == '1':
    b = 'false'
elif b == '0':
    b = 'true'
print b
4

2 に答える 2

2

私は似たようなことをしてきました

私はあなたがpywinautoが欲しいと思うかもしれません

from pywinauto.findwindows import find_windows

find_windows(best_match='YOURWINDOWNAMEHERE')

YOURWINDOWNAMEHERE が開いていない場合、これにより例外が発生します

編集:実際には、FirefoxまたはChromeの場合、「YOURWINDOWNAMEHERE」が現在のページである場合にのみ機能します。たとえば、このページは「python - How do i programmatically ...」です。

それが見つかった場合、int を返します。私が知る限り、この int はウィンドウを参照できるはずです。

例:。

>>>find_windows(best_match="calculator")    #this gets an exception

# ::I manually open Calculator now ::

>>>find_windows(best_match="calculator")

[12345] #orwhatever process number it gets
于 2013-05-07T22:19:58.360 に答える
1

次のように Java のウィンドウ タイトルを使用して、taskill を使用して Android ロガー (logcat) を強制終了しました。

taskkill /F /FI "WINDOWTITLE eq logcat"

およびファイル名を使用するエミュレーター:

taskkill /F /IM emulator-arm.exe

あなたのケースで動作するはずです。

于 2013-05-07T21:15:03.970 に答える