【发布时间】:2016-10-31 14:45:59
【问题描述】:
我正在尝试使用 Selenium 的 WebDriver 来自动测试我正在开发的安全工具。具体来说,我试图通过反射 XSS 将 js 有效负载注入 HTML 页面。为了测试有效载荷的适用性,我需要验证脚本是否实际运行。
通过让 XSS 有效负载调用特定函数,该函数使用以下方法之一将信息传递给我的 python 程序,我在很大程度上成功地做到了这一点:
- 在 DOM 中创建新元素并使用 WebDriver python API 查找它们(find_elements_by_class_name 等)
- 在js中设置窗口标题并通过driver.title读取
- 在 js 中创建对话框/提示并通过 driver.switch_to_alert() 处理它们
但是上面的内容都非常笨拙和缓慢(尤其是方法#1,如果所需的元素不存在我很愚蠢并且我的隐式等待非常高,但我仍然不喜欢创建 dom 元素以传递字符串的方法)。此外,如果有多个警报,最后一个选项会始终失败。
我想通过 driver.execute_script(script) 检索变量值,但是我的脚本似乎无法实际读取值,因为像“return window.name”这样的东西总是返回 None。话虽如此,我不认为 execute_script() 是最快的方法,因为它在执行所述脚本时必须执行大量开销。
将运行时信息从浏览器上下文中传递到控制 python 程序的最快方法是什么?我不需要发送太多信息,最多可能只有几 kb,所以cookie 值就足够了,但浏览器的 URL 可能不行。
【问题讨论】:
-
所以你正试图从加载的页面中读取 cookie 值和其他信息对吗?
-
我正在尝试检查给定脚本是否实际执行。该脚本可以做任何事情,从设置 cookie 值、更改 DOM、更改 BOM 甚至发送 AJAX 请求。脚本的内容由我来决定,我只想知道一个很好的方法来确定脚本是否首先运行。
标签: javascript python selenium