从Selenium WebDriver传递信息的最简单方法是什么?

时间:2016-10-31 14:46:00

标签: javascript python selenium

我正在尝试使用Selenium的WebDriver来自动化我正在开发的安全工具的测试。具体来说,我试图通过反映的XSS将js有效负载注入HTML页面。为了测试有效载荷的适应性,我需要验证脚本是否实际运行。

我通过让XSS有效负载调用一个特定的函数来完成这项工作,该函数使用以下方法之一将信息传递给我的python程序:

  1. 在DOM中创建新元素并使用WebDriver python API(find_elements_by_class_name等)查找它们
  2. 在js中设置窗口标题并通过driver.title
  3. 读取
  4. 在js中创建对话框/提示并通过driver.switch_to_alert()
  5. 处理它们

    然而,上面的内容都非常hacky和慢(特别是方法#1,如果所需的元素不存在我很愚蠢,我的隐含等待真的很高,但我仍然不喜欢创建dom元素以传递字符串的方法)。此外,如果有多个警报,则最后一个选项会非常一致地失败。

    我想通过driver.execute_script(脚本)检索变量值但是我的脚本似乎无法实际读取值,因为像'return window.name'这样的东西总是返回None。话虽这么说,我不希望execute_script()成为最快的方法,因为它必须在执行所述脚本时执行大量开销。

    将运行时信息从浏览器上下文传递到控制python程序的最快方法是什么?我不需要发送太多信息,最多可能是几kb,所以a cookie值可能就足够了,但浏览器的URL可能不会。

1 个答案:

答案 0 :(得分:1)

class PassByReferenceIsh:
    def __init__(self):
        self.variable = 'Original'
        self.change('variable')
        print self.variable

    def change(self, var):
        self.__dict__[var] = 'Changed'