当前位置: 首页 > 知识库问答 >
问题:

无法使用python在selenium中获取警报框的截图

蔡默
2023-03-14

我对selenium是新的,每当警报弹出时,我想拍警报框的截图。我编写的代码如下:

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoAlertPresentException
import time


class SearchXSS(unittest.TestCase):

def setUp(self):
    self.driver = webdriver.Firefox()

def test_search_in_python_org(self):
    driver = self.driver
    driver.get("http://testfire.net/")
    ele = driver.find_element_by_name("txtSearch")
    ele.send_keys("<script>alert(document.cookie)</script>")
    ele.send_keys(Keys.RETURN)
    try:
        time.sleep(1)
        alert = driver.switch_to_alert()
        driver.get_screenshot_as_file('screenshot.png')
        alert.accept()
    except NoAlertPresentException as e:
        print "no alert to accept "
    fo.close()


def tearDown(self):
    self.driver.quit()

if __name__=="__main__":
    unittest.main()

我在拍摄截图时遇到了这个问题。错误信息如下所示

=======================================================================================================================================================================================================",第22行,在test_search_in_python_org driver.get_screenshot_as_file('screenshot.png')文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py”中,第798行,在get_screenshot_as_file png=self.get_screenshot_as_file png=self.get_screenshot_as_png()文件“('ASCII'))
文件”/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py“,第827行,在get_screenshot_as_base64返回self.execute(command.screenshot)['value']文件”/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py“,第236行,在execute self.error_handler.check_response(响应)文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py”,第191行,在check_response中引发exception_class(消息,屏幕,stacktrace,value['aler'].get('text'))expectiontedalertpresentexception:Alert text:amsessionid=92632533494消息:意外模式对话框(文本:amsessionid=92632533494)stacktrace:at e.js:4745)位于(http://testfire.net/search.aspx?txtsearch=%3cscript%3ealer%28document.cookie%29%3c%2fscript%3e:80)

-----------------------------------------------------------------------------------------------------------------------------------------------------------

失败(错误=1)[在10.4s内完成,退出代码为1]

帮我解决这个问题。

共有1个答案

苗森
2023-03-14

您不能使用警报框进行屏幕截图,您需要首先处理警报表示接受拒绝然后进行屏幕截图,因为当selenium进行带有警报的屏幕截图时,它总是抛出ExpectiondalertPresentException,因此不可能使用selenium使用alert框进行屏幕截图。因此,您需要如下所示:-

alert = driver.switch_to_alert()
alert.accept()
driver.get_screenshot_as_file('screenshot.png')

如果您想用alert进行屏幕截图,您应该用其他库尝试一些不同的方法,在java中有robot类,可以在这种情况下进行screenshot,但我不确定在python中有什么等效的方法。

 类似资料:
  • 问题内容: 我正在尝试提取输入框中的文本, 我开始 我尝试了input.getText()但我得到了 问题答案: 使用它来获取输入元素的值:

  • 它仍然无法工作,并且现在得到了timeoutException。

  • 问题内容: 我为此进行了很多搜索,但找不到解决方案。这是java中可能的解决方案的类似问题。 Python中有类似的解决方案吗? 问题答案: 除了硒以外,此示例还需要PIL映像库。有时将其作为标准库之一放入,有时却不作为,但如果没有,则可以使用 最后输出是… Stackoverflow徽标!!! 当然,现在仅获取静态图像将是过大的选择,但是如果您想要获取需要Javascript才能实现的功能,那可

  • 问题内容: 我想检测是否弹出警报。目前,我正在使用以下代码: 问题是,如果网页的当前状态没有警报,它将等待特定的时间,直到达到超时,然后引发异常,因此性能真的很差。 有没有更好的方法,也许可以将警报事件处理程序用于动态发生的警报? 问题答案: 这是使用“从此处进行显式等待”对我有用的WebDriver:高级用法

  • 如何将以下警报转换为ESLint可接受的警报? 我的构建失败,因为显然我不能使用"警报"。我想在加载某个东西时调用此警报。此代码工作成功,但不符合ESLint。 http://eslint.org/docs/rules/no-alert 如何修改代码使其成功构建? 提前感谢:)

  • 我正在编写一个Python(3.6.6)脚本,它使用Selenium(3.141.0)在Chrome(ChromeDriver版本77.0.3865.40)中打开一个网址,导航一系列菜单,在弹出窗口中输入登录详细信息并登录。这是我的剧本: 如果我手动执行此导航,我会得到一个提示,询问用户名和密码,并有两个按钮用于登录或取消。当Selenium执行此操作时,我看到提示闪烁,但随后很快消失,因此我得到