【发布时间】:2017-07-31 12:09:26
【问题描述】:
我正在尝试使用 Python 自动化一些 SAP 作业监控。我想创建一个应该执行以下操作的脚本:
连接并登录SAP环境->开启SM37事务->发送作业参数(name-user-from-to)-> 读取输出并将其存储到数据库中。
我不知道任何允许我这样做的模块或库。所以我检查了WEBGUI是否已经启用。我可以通过浏览器打开环境。浏览模块应该允许我做我需要的一切。 尝试使用 Mechanize 和 RoboBrowser。它可以工作,但是 WEBGUI 运行了很多用于渲染的 javascript,而这些模块不处理 javascript。
还有一个镜头:Selenium。 我能够连接并登录到环境。但是当试图从新页面(主菜单)中选择一个元素时,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 是 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;">
仍然找不到元素。我该如何解决? 提前致谢。
【问题讨论】:
-
检查元素是否在框架内
-
源代码根本不包含该元素,也不包含在 iframe 中。只有标题(“欢迎”)。即表示登录成功。
-
使用firefox的firebug插件检查。检查特定元素的代码。
-
我已经用源代码编辑了原始帖子。你可以在那里查看。
-
至少有 3 个带有 id 的帧,
ITSFRAME1、ITSFRAME2和ITSTERMFRAME。你需要弄清楚你的元素在哪个框架中。再次使用、firebug 和检查元素。
标签: javascript python selenium sap-gui