我正在尝试使用 Selenium 的 WebDriver 来自动测试我正在开发的安全工具。具体来说,我试图通过反射 XSS 将 js 有效负载注入(inject) 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 可能不够。
最佳答案
import pickle, requests
import selenium.webdriver
driver = selenium.webdriver.Firefox()
driver.get("http://google.com")
# getting page title with js
print driver.execute_script("""
return document.title;
""")
# add a random cookie
driver.add_cookie({'name':'test', 'value': 'test'})
# save cookies on a pickle file
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
driver.close()
# then later open the cookies with
loaded_cookies = pickle.load(open("cookies.pkl", "rb"))
print loaded_cookies
关于javascript - 从 Selenium WebDriver 传递信息的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40344560/