2017-07-31 88 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)