2017-07-31 84 views
0

我試圖用Python自動化一些SAP工作監控。我想創建一個腳本,應該做到以下幾點:硒蟒蛇:在javascript運行後找不到元素

連接和登錄SAP環境- >開放SM37交易- >發送作業參數(名用戶 - 從 - 到)- >讀輸出並將其存儲到數據庫中。

我不知道任何模塊或庫允許我這樣做。所以我查了一下WEBGUI已經啓用了。我可以通過瀏覽器打開環境。瀏覽模塊應該允許我做我需要的一切。 嘗試機械和RoboBrowser。它的工作原理,但WEBGUI運行了很多JavaScript的renderize和這些模塊不處理JavaScript。

還有一個鏡頭:硒。 我能夠連接並登錄到環境。但是當試圖從新頁面(主菜單)中選擇一個元素時,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'))) 

編輯:

有兩個源代碼:SC-1是一個硒讀取。 SC-2是在JavaScript呈現網站(來自「檢查元素」的網站)時出現的那個。

全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中。只有標題(「歡迎」)。這意味着登錄成功了。 –

+0

使用firefox的firefox附加程序進行檢查。檢查特定元素的代碼。 –

回答

0

解決方案是進入包含renderized 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)