如何在无头浏览器中关闭模态对话框?
我正在用selenium2、python和亚马逊的ec2(Ubuntu 11.04)来做我的项目。
因为在亚马逊的ec2上没有显示器,所以我使用了PyVirtualDisplay,这样可以在没有显示器的情况下运行程序。
当我运行我的项目时,出现了一个异常
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'
这个问题应该怎么解决呢?
在selenium中,如何用python处理这样的对话框呢?
1 个回答
2
请在执行 driver.get() 之前和之后运行以下代码:
driver.execute_script('window.onbeforeunload = function() {}')
这样应该就能正常工作。我没有确认过,但Firefox的网站上应该有关于这个事件的更多信息。
简单来说,你是在重置网页中的处理程序,这个处理程序负责显示那个弹出对话框。所以你就看不到它了。这种方法基本上解决了我的问题。