Python 3.6.2/Selenium 2.0/AJAX-如何等待脚本结束服务器请求
因此,我有一个Web应用程序正在工作,它需要收集信息、构建一些报告并运行一些基本数据分析 问题是,我是HTML、Ajax(异步JavaScript和XML)、Python和Selenium的新手 到目前为止,我收集的是:Python 3.6.2/Selenium 2.0/AJAX-如何等待脚本结束服务器请求,python,ajax,selenium,Python,Ajax,Selenium,因此,我有一个Web应用程序正在工作,它需要收集信息、构建一些报告并运行一些基本数据分析 问题是,我是HTML、Ajax(异步JavaScript和XML)、Python和Selenium的新手 到目前为止,我收集的是: Ajax的本质是执行异步Web浏览器活动,在我的例子中,是发送服务器请求来推/拉一些数据 Selenium处理执行Wait操作的异步事件,如: time.sleep('time in ms')#使用时间库。所以不是真的硒 显式等待:定义在代码中继续之前等待特定条件发生 E
Wait
操作的异步事件,如:
- time.sleep('time in ms')#使用时间库。所以不是真的硒李>
- 显式等待:定义在代码中继续之前等待特定条件发生李>
EC代表预期条件,表示为: 标题是 标题包含: 元素的存在位置 位于的元素的可见性 可见度 存在所有元素 文本在元素中显示 文本在元素值中显示 帧\u到\u可用\u和\u切换\u到\u _元素的不可见性_ 元素可点击 陈腐 要选择的元素 元素位于要选择的元素 元素\u选择\u状态\u为 元素\u已定位\u选择\u状态\u待 警报存在
- 隐式等待:告诉WebDriver在试图查找一个或多个元素时轮询DOM(文档对象模型)一段时间(如果它们不立即可用);
-驱动程序。隐式等待(10)
- 使用Java执行JavaScript并应用wait:jQuery在其Query.active变量中记录有多少Ajax调用处于活动状态李>
- FluentWait:用于处理不确定等待的FluentWait选项李>
- WebdriverWait:使用ExpectedCondition和WebdriverWait策略
<div id="div_39_1_3" class="Button CoachView CPP BPMHSectionChild CoachView_show" data-type="com.ibm.bpm.coach.Snapshot_b24acf10_7ca3_40fa_b73f_782cddfd48e6.Button" data-binding="local.clearButton" data-bindingtype="boolean" data-config="config175" data-viewid="GhostClear" data-eventid="boundaryEvent_42" data-ibmbpm-layoutpreview="horizontal" control-name="/GhostClear">
<button class="btn btn-labeled"><span class="btn-label icon fa fa-times"></span>Clear</button></div>
清楚的
这是按钮的事件:
函数(a){!e._instance.btn.disabled&&
c、 ui.executeEventHandlingFunction(e,e._proto.EVT_ONCLICK)和
(e._instance.multiClicks | |)(e._instance.btn.disabled=!0,
f、 添加(e._instance.btn,“禁用”)、e.context.binding和
e、 context.binding.set(“value”,!0),e.context.trigger(函数(a){
e、 _instance.btn.disabled=!1;
f、 删除(e._instance.btn,“禁用”);
setTimeout(函数(){
c、 ui.executeEventHandlingFunction(e,e._proto.EVT_ONBOUNDARYEVT,
a、 (状态)
})
}, {
callBackForAll:!0
}))
}
然后,我的网络通知ajaxCoach继续执行以下请求
selenium是否可以查看/查找是否存在AJAX操作
结束了Python中的页面实现操作?如果页面上有jquery,可以使用jquery定义按钮 并等待事件函数就绪。 关于你的问题:
driver.execute_script('button = $("#div_39_1_3");')
events = driver.execute_script('return $._data(button[0],
"events");')
现在您需要等待事件变量不是none。是的,这是可能的,但它取决于页面执行ajax请求所使用的库。我们的想法是等待状态或待处理请求的计数为0。@FlorentB.,谢谢您的回复。我试图找到一些关于计算未决请求的信息,但在Selenium或Ajax Js脚本中都没有找到。你有没有一个例子来说明如何处理这些请求?如果你不知道页面是如何处理请求的,那么这个例子是没有用的。添加一个断点,单击并逐步运行代码,找出使用了哪个库。@FlorentB。我可以收集更多信息(因为我必须学习JS及其库的主要概念,经过一些黑盒和调试,dojo.JS(希望得到一些有效的答案)在堆栈中调用,并与其中的某些函数进行一些交互。只是在过程中找不到状态或请求。您可以在js中检查
onloadend
事件。然后执行脚本将该值返回到python中。
driver.execute_script('button = $("#div_39_1_3");')
events = driver.execute_script('return $._data(button[0],
"events");')