【问题标题】:Selenium webdriver click alertSelenium webdriver 点击警报
【发布时间】:2017-06-07 19:33:32
【问题描述】:

我正在尝试抓取这个网站 http://bombayhighcourt.nic.in/party_query.php 。一切都很顺利,直到我第一次抓取结果并返回此页面。然后出现以下警报:

我可以看到负责警报的代码是这样的:

function validate()
{
  with(document.pqueryfrm)
  {
    if(trim(m_party.value)=="")
    {
      alert("Enter Party Name");
      m_party.focus();
      return false;
    }
    if(m_party.value=="")
    {
      alert("Enter Party Name");
      m_party.focus();
      return false;
    }
  }
}

我正在尝试使用此代码在此警报中单击“确定”,但它没有做任何事情:

        try:
            WebDriverWait(s.mydriver, 3).until(EC.alert_is_present(),"Enter Party Name" )
            alert = s.mydriver.switch_to.alert()
            alert.accept()
            print("alert accepted")
        except TimeoutException:
            print ("no alert")

我收到以下错误消息:

UnexpectedAlertPresentException: Alert Text: None
Message: unexpected alert open: {Alert text : Enter Party Name}
  (Session info: chrome=55.0.2883.87)
  (Driver info: chromedriver=2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform=Windows NT 6.1.7601 SP1 x86_64)

我做错了什么?

【问题讨论】:

  • 您遇到任何错误吗?
  • 你能给我们看看错误文本吗?
  • 道歉。错误消息与警报有关。我已经编辑了我的帖子。谢谢。

标签: python python-3.x selenium-webdriver web-scraping


【解决方案1】:

这一行有错误

alert = s.mydriver.switch_to.alert()

应该是这样的

alert = s.mydriver.switch_to.alert

alert = s.mydriver.switch_to_alert()

您还进行了两次相同的操作(EC.alert_is_present() 允许切换到警报以及driver.switch_to.alert)。你可以简单地使用

alert = WebDriverWait(s.mydriver, 3).until(EC.alert_is_present(),"Enter Party Name" )
alert.accept()
print("alert accepted")

【讨论】:

  • 在 C# 中是driver.SwitchTo().Alert().Accept();