简体   繁体   中英

How to quit modal dialog window in selenium headless browser?

I am using selenium2 + python + amazon ec2 (Ubuntu 11.04) for my project.

For Headless reason in amazon ec2, I am using PyVirtualDisplay Since there is no display in server.

when i am running my project, I am getting the exception

Traceback (most recent call last):
   File "spyfu_ad_crawler_server.py", line 68, in <module>
     main(i[0])
   File "spyfu_ad_crawler_server.py", line 34, in main
     WebDriverWait(browser, 10).until(lambda driver :    driver.find_element_by_xpath("/html/body/form/div[3]/div[3]/div/div/table/tbody/tr[3]/td/tab le/tbody/tr[2]/td/table/tbody"))
   File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/support/wait.py", line 49, in until
      value = method(self._driver)
    File "spyfu_ad_crawler_server.py", line 34, in <lambda>
      WebDriverWait(browser, 10).until(lambda driver : driver.find_element_by_xpath("/html/body/form/div[3]/div[3]/div/div/table/tbody/tr[3]/td/table/tbody/tr[2]/td/table/tbody"))
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 210, in find_element_by_xpath
       return self.find_element(by=By.XPATH, value=xpath)
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 645, in find_element
       {'using': by, 'value': value})['value']
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 153, in execute
      self.error_handler.check_response(response)
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 147, in check_response
      raise exception_class(message, screen, stacktrace)
        WebDriverException: Message: u'Modal dialog present' 


Traceback (most recent call last):
     File "spyfu_ad_crawler_server.py", line 75, in <module>
       browser.get(base_url)
     File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 165, in get
        self.execute(Command.GET, {'url': url})
     File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 153, in execute
         self.error_handler.check_response(response)
     File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 147, in check_response
         raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.WebDriverException: Message: u'Modal dialog present' 

How it is supposed to solve?

How to handle such dialog boxes in selenium in python?

Please run the following code before and after doing driver.get():

 driver.execute_script('window.onbeforeunload = function() {}')

It should work. I haven't checked but Firefox website should have more details on this event.

Basically you are resetting the handler in the webpage that gives that modal dialog box. So you won't see it displayed. This approach pretty much solved my issue.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM