2016-10-31 4 views
2

私は開発中のセキュリティツールのテストを自動化するためにSeleniumのWebDriverを使用しようとしています。具体的には、反射XSSを介してHTMLページにjsペイロードを挿入しようとしています。ペイロードの適性をテストするためには、実際にスクリプトが実行されていることを確認する必要があります。Selenium WebDriverの情報を簡単に渡す方法は?

私はXSSのペイロードは、次のいずれかの方法で、私のPythonプログラムに情報を渡す特定の関数を呼び出すことによってこれを行うことで、主に成功している:

  1. はDOMで新しい要素を作成し、それらを見つけます
  2. 作成ダイアログをJSでのウィンドウのタイトルを設定し、driver.titleを経由して、それを読んでwebdriverをパイソンのAPI(find_elements_by_class_nameなど)
  3. は/ jsの中で求められますし、driver.switch_to_alert()
経由でそれらを扱います

しかし、上記のすべてがかなりハッキーであり、遅いです(特に希望の要素が存在しない場合は#1)私は愚かであり、私の暗黙の待ち時間は本当に高いですが、私はまだdomを作成する方法が嫌いです文字列を渡す要素)。また、複数のアラートがある場合、最後のオプションは一貫して失敗します。

driver.execute_script(スクリプト)で変数値を取得したかったのですが、 'return window.name'のようなものは常にNoneを返すので、スクリプトは実際に値を読み取れないようです。つまり、私はexecute_script()が最も速いメソッドであるとは思っていません。なぜなら、このスクリプトを実行する際に多くのオーバーヘッドを実行する必要があるからです。

ブラウザコンテキスト内から実行時情報を制御するPythonプログラムに渡す最も速い方法は何ですか?多くの情報を送信する必要はありません。たぶん数kbになるので、Cookieの値で十分ですが、ブラウザのURLはおそらくそうではありません。

+0

したがって、読み込まれたページからソートのクッキー値やその他の情報を読み取ろうとしていますか? – gerosalesc

+0

スクリプトが実際に実行されたかどうかを確認しようとしています。スクリプトは、クッキー値の設定、DOMの変更、BOMの変更、またはAJAXリクエストの送信から何でもできます。スクリプトの内容は決まります。私が知りたいことは、スクリプトが最初に実行されるかどうかを判断する良い方法です。 – SyntaxTerror

答えて

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 
+0

私はあなたが誤解しているかもしれないと思います。合格情報は問題ではなく、むしろスピードと効率に問題があります。私は、DOM/cookies/BOMを変更してドライバで読み込む以外の方法があるかどうかを確認しようとしていました。さらに、私がクッキーの値を望むならば、私はそれらを再び読み込むためにファイルに保存しません:) – SyntaxTerror

+0

こんにちは@SyntaxTerror!これまで見たことから、ドライバーからデータを取得するのが普通の方法です。 Seleniumのパフォーマンスに関しては、考慮したいことがいくつかあります。 PhantomJSドライバをチェックしましたか?あなたのニーズについていくつか詳しく説明できますか?処理するページが多い状況がありますか?ログイン状況はありますか?何をしたいですか?私はあなたがjavascriptの後にDOMを持っていたいと思いますか? –

+0

私は今PhantomJSを見ていて、調査すべきもののようです... jsが実行された後にDOMは必要ありません。理想的には、このスクリプトは何千ものリクエストを作成し、各応答を実行するために必要な時間だけ各応答を維持します(DOM要素の一部はレスポンスに含まれず、非同期にフェッチされるため)。 – SyntaxTerror

関連する問題