Python を使用して SAP ジョブの監視を自動化しようとしています。次のことを行うスクリプトを作成したいと思います。
SAP 環境に接続してログイン-> SM37 トランザクションを開く->ジョブ パラメータを送信 (name-user-from-to) ->出力を読み取り、データベースに保存します。
それを可能にするモジュールやライブラリについては知りません。だから私はWEBGUIがすでに有効になっていることを確認しました。ブラウザから環境を開くことができます。ブラウジング モジュールがあれば、必要なことはすべてできるはずです。Mechanize と RoboBrowser で試してみました。動作しますが、WEBGUI はレンダリングのために多くの JavaScript を実行し、それらのモジュールは JavaScript を処理しません。
もう 1 つのショットがあります。Selenium です。環境に接続してログインできました。しかし、新しいページ (メイン メニュー) から要素を選択しようとすると、Selenium は要素を見つけることができません。
ソースコードの印刷 メイン メニュー サイトが JavaScript でレンダリングされていることに気付きました。ソースコードには要素がまったく含まれておらず、タイトル ("Welcome") のみが含まれています。つまり、ログインに成功しました。
私はこれを求める多くの投稿を読みましたが、WebDriverWait
明示的な条件で使用することを誰もが推奨しています。
これを試してみましたが、うまくいきませんでした:
driver.get("http://mysapserver.domain:8000/sap/bc/gui/sap/its/webgui?sap-client=300&sap-language=ES")
wait = WebDriverWait(driver, 30)
element = wait.until(EC.presence_of_element_located((By.ID, 'ToolbarOkCode')))
編集:
ソースコードは 2 つあります。SC-1 は、Selenium が読み取るものです。SC-2 は、javascript がサイトをレンダリングすると表示されるものです (「Inspect Element」のもの)。
完全な SC-1 はこれです: https://pastebin.com/5xURA0Dc
要素自体の SC-2 は次のとおりです。
<input id="ToolbarOkCode" ct="I" lsdata="{0:'ToolbarOkCode',1:'Comando',4:200,13:'150px',23:true}" lsevents="{Change:[{ClientAction:'none'},{type:'TOOLBARINPUTFIELD'}],Enter:[{ClientAction:'submit',PrepareScript:'return\x20its.XControlSubmit\x28\x29\x3b',ResponseData:'delta',TransportMethod:'partial'},{Submit:'X',type:'TOOLBARINPUTFIELD'}]}" type="text" maxlength="200" tabindex="0" ti="0" title="Comando" class="urEdf2TxtRadius urEdf2TxtEnbl urEdfVAlign" value="" autocomplete="on" autocorrect="off" name="ToolbarOkCode" style="width:150px;">
まだ要素を見つけることができません。どうすれば解決できますか?前もって感謝します。