使用Phantomjs和Selenium接受弹出窗口

时间:2016-07-13 14:16:45

标签: python-2.7 selenium phantomjs

我正在使用python 2.7,Selenium和PhantomJs。

当我点击我的脚本中的登录按钮时,它会转到一个新页面,然后会出现一个我必须接受的弹出窗口。

这是我尝试使用的代码。我是从这里得到的    How can I handle an alert with GhostDriver via Python?

sign_in.click() 
js = 'window.alert = function(message) { lastAlert = message; }'
driver.execute_script("%s" % js) 
driver.execute_script("return lastAlert")

这是我得到的错误:

  

引发exception_class(消息,屏幕,堆栈跟踪)   selenium.common.exceptions.WebDriverException:消息:   {" errorMessage":"无法找到变量:lastAlert","请求":{" hea   德尔斯" {"接受":"应用/ JSON""接受编码":"身份""连接":"靠近"" Content-Length的":" 95""内容类型   ":"应用/ JSON;字符集= UTF-8""主机":" 127.0.0.1:56712""用户 - 剂":" Python的的urllib / 2.7"}" httpVersion":" 1.1""实现方法具   d":" POST""后":" {\"的sessionId \&#34 ;:   \" 3832e2c0-4902-11e6-b766-0d7f487d0794 \",\" args \":[],\" script \":   \"返回lastAlert   \"}"" URL":" /执行"" urlParsed" {"锚":& #34;""查询":"""文件":"执行""目录&# 34;:" /""路径":" /执行""相对于&#34 ;:   " /执行""端口":"""主机":"""密码":"""使用者":""" USERINFO":"&#34 ;, "权威":"""协议":"""源":" /执行"" q   ueryKey":{},"大块":["执行"]}" urlOriginal":" /会话/ 3832e2c0-4902-11e6 -b766-0d7f487d0794 /执行"}}   屏幕截图:可通过屏幕获取

我对javascript不是很有经验,并且正确方向上的一点很有用。

1 个答案:

答案 0 :(得分:0)

以下是我正在使用的Behat步骤:

/** 
  * This step overrides windows.confirm and basically accepts it before it is displayed.
  *
  * @When /^(?:|I )bypass the popup$/
  */
  public function bypassPopup() {
    $function = "
    var realConfirm=window.confirm;
    window.confirm=function(){
    window.confirm=realConfirm;
    return true;
};
    ";
    $session = $this->getSession();
    $session->executeScript($function);
  }

在单击按钮之前放置它,当您单击弹出窗口时将自动接受。 在这种情况下,只接受第一个弹出窗口。