Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.6.2/Selenium 2.0/AJAX-如何等待脚本结束服务器请求_Python_Ajax_Selenium - Fatal编程技术网

Python 3.6.2/Selenium 2.0/AJAX-如何等待脚本结束服务器请求

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

因此,我有一个Web应用程序正在工作,它需要收集信息、构建一些报告并运行一些基本数据分析

问题是,我是HTML、Ajax(异步JavaScript和XML)、Python和Selenium的新手

到目前为止,我收集的是:

  • Ajax的本质是执行异步Web浏览器活动,在我的例子中,是发送服务器请求来推/拉一些数据
  • Selenium处理执行
    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策略
    由于我有以下情况,应使用什么:

    按钮通过Ajax发送清除请求

    <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");')