javascript - 从 Selenium WebDriver 传递信息的最简单方法?

标签 javascript python selenium

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

通过让 XSS 有效载荷调用一个特定的函数,该函数使用以下方法之一将信息传递给我的 python 程序,我在这方面取得了很大的成功:

  1. 在 DOM 中创建新元素并使用 WebDriver python API 查找它们(find_elements_by_class_name 等)
  2. 在js中设置窗口标题并通过driver.title读取
  3. 在 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/

相关文章:

javascript - 比较两个对象的匹配值并将任何不匹配的值推送到单独的数组,不断获得多个重复项

python - 烤宽面条 - 错误

asp.net - 在 JavaScript 中验证日期

javascript - 使用 firefox 扩展获取 SSL 信息

javascript - 使用 jQuery 检索表中的上一行和下一行

python - 为什么我的绘图将 x 轴上的日期时间绘制为指数?

python - 在 Python 中合并 2 个排序列表的有效解决方案

c# - 如何检查 Selenium 中的开关按钮是打开还是关闭?

python - HTTP 响应中使用了哪种 base64?

Python - 使用Flipkart API的参数