2017-07-31 5 views
0

私はPythonでいくつかのSAPジョブ監視を自動化しようとしています。 >読む - (名前、ユーザーから-への)ジョブパラメータを送信> - >オープンSM37トランザクション-Selenium Python:javascriptの実行後に要素が見つかりません

ConnectおよびSAP環境ログイン:私は、次の操作を実行するスクリプトを作成したいですその出力をデータベースに格納します。

私はそれを可能にするモジュールまたはライブラリについて知らない。 WEBGUIがすでに有効になっていることを確認しました。私はブラウザを通して環境を開くことができます。閲覧モジュールは、私が必要なすべてを行うことを可能にするはずです。 MechanizeとRoboBrowserで試行しました。それは動作しますが、WEBGUIはレンダリングのために多くのjavascriptを実行し、それらのモジュールはjavascriptを処理しません。

もう1つのショットがあります:セレン。 私は接続し、環境にログインすることができました。しかし、新しいページ(メインメニュー)から要素を選択しようとすると、Seleniumは要素を見つけることができません。

ソースコードを印刷するメインメニューのサイトがjavascriptでレンダリングされていることがわかりました。ソースコードには要素はまったく含まれておらず、タイトル(「ようこそ」)のみです。これはログインが成功したことを意味します。

私はこれを求めて多くの投稿を読んでおり、誰も明示的な条件付きで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'))) 

EDIT:

を2 sourcecodesがあります:SC-1は、セレンを読み込むものです。 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;"> 

はまだ要素を見つけることができません。どうすれば解決できますか? ありがとうございます。

+0

要素が –

+0

内部フレームにおけるソースコードはまったくの要素が含まれていない、どちらのiframe内にあるかどうかを確認します。タイトルのみ(「Welcome 」)。つまり、ログインが成功したことを意味します。 –

+0

FirefoxのFirebugアドオンを使用して確認してください。特定の要素のコードを確認してください。 –

答えて

0

解決策は、レンダリングされたhtmlを含むiframeに(コントロールで)移動することでした。

driver2.get("http://mysapserver.domain:8000/sap/bc/gui/sap/its/webgui?sap-client=300&sap-language=ES") 
iframe = driver2.find_elements_by_tag_name('iframe')[0] 
driver2.switch_to_default_content() 
driver2.switch_to_frame(iframe) 
driver2.find_element_by_id("ToolbarOkCode").send_keys("SM37") 
driver2.find_element_by_id("ToolbarOkCode").send_keys(Keys.ENTER) 
関連する問題