【问题标题】:Easiest way to pass info out of a Selenium WebDriver?从 Selenium WebDriver 传递信息的最简单方法是什么?
【发布时间】:2016-10-31 14:45:59
【问题描述】:

我正在尝试使用 Selenium 的 WebDriver 来自动测试我正在开发的安全工具。具体来说,我试图通过反射 XSS 将 js 有效负载注入 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 可能不行。

【问题讨论】:

  • 所以你正试图从加载的页面中读取 cookie 值和其他信息对吗?
  • 我正在尝试检查给定脚本是否实际执行。该脚本可以做任何事情,从设置 cookie 值、更改 DOM、更改 BOM 甚至发送 AJAX 请求。脚本的内容由我来决定,我只想知道一个很好的方法来确定脚本是否首先运行。

标签: javascript python selenium


【解决方案1】:
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

【讨论】:

  • 我想你可能误解了。传递信息不是问题,而是速度和效率问题。我试图看看除了更改 DOM/cookies/BOM 并通过驱动程序读取它之外是否有更好的方法。此外,如果我想要 cookie 值,我不会将它们保存到文件中只是为了再次读取它们:)
  • 嗨@SyntaxTerror!从我目前看到的情况来看,从驱动程序获取数据是通常的方法。关于 Selenium 的性能,您可能还需要考虑其他一些事情。你检查了 PhantomJS 驱动程序吗?您能否详细说明您的需求?您是否有很多页面需要处理的情况?有登录的情况吗?你想让我做什么?你想在 javascript 之后拥有 DOM,我说得对吗?
  • 我现在正在查看 PhantomJS,它看起来像是我应该调查的东西...... js 执行后我不需要 DOM。理想情况下,该脚本将发出数千个请求,使每个响应只保持足够长的时间以供相关的 javascript 执行(因为某些 DOM 元素可能不包含在响应中,而是异步获取)。
猜你喜欢
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多