在phantom.js中确认警报窗口

时间:2013-11-11 09:42:55

标签: javascript web-scraping phantomjs confirm

我有这个功能,找到按钮并单击它,但在该警报出现后我需要使用phantom.js确认它

function() {
  page.evaluate(function() {
    $('.item-list clicked').first().find($('.comment-delete')).find('a').click();
  })
}

可能是我可以模拟立即点击提醒的功能吗?或者使用函数waitFor来等待这个警报?(不太可能这样,waitFor只等待DOM对象我认为是这样)

5 个答案:

答案 0 :(得分:6)

我找不到其他帮助我回答这个问题的stackoverflow答案,但基本上你可以注入一个确认警告弹出窗口的javascript函数:

这是我的python webdriver实现:

def example_js_confirmation( self ):
    js_confirm = 'window.confirm = function(){return true;}'    # .js function to confirm a popup
    self.execute_javascript( js_confirm )
    self.find_by_id( 'submit' ).click()
    self.execute_javascript( 'return window.confirm' )  # trigger the injected js that returns true (virtually click OK)

这是某人的待办事项列表=): Selenium Desired Capabilities - set handlesAlerts for PhantomJS driver

答案 1 :(得分:3)

据我所知,Phantom.JS无头。 您唯一能做的就是使用

获取警报的上下文
window.onAlert = function(alertText){
    ...
   }

但我认为不超过这个。 您不能以编程方式关闭(通常)或渲染(在Phantom.JS中)警报。

有些消息来源:
* Render JavaScript alerts with Phantom.JS
* Close alert programmatically

答案 2 :(得分:0)

“确认提醒”是一个令人困惑的短语,因为Javascript同时提供alert(显示带有确定按钮的消息)和confirm(显示确定和取消按钮),并且它不是明确你的意思。

至少PhantomJS 2.x的行为就好像它在alert框上单击“确定”并在confirm框上单击“取消”。

如果您想在confirm框上点击“确定”而不是“取消”,只要您不担心,就可以致电execute_javascript覆盖window.confirm以返回true关于在加载过程中弹出confirm个框将在execute_javascript有机会介入之前处理。如果你想抓住那些,我能想到的最好的事情是修补PhantomJS源或通过上游代理注入JS。

答案 3 :(得分:-1)

在Python中使用splinter,您可以添加这些行(来自docs)。

alert = browser.get_alert()
alert.accept()

答案 4 :(得分:-1)

我做到了:

// 1) override window.alert
page.evaluate(function(){
  window.alert = function(msg){
    window.callPhantom({alert: msg}); // will call page.onCallback()
    return true; // will "close the alert"
  };
});

// 2) re-bind to onAlert()
page.onCallback = function(obj) {
  page.onAlert(obj.alert); // will trigger page.onAlert()
};