2016-10-05 7 views
6

私はセレナのwebdriverでヘッダを取得しようとしています。次のような何か:pythonのヘッダをつかむ方法selenium-webdriver

>>> import requests 
>>> res=requests.get('http://google.com') 
>>> print res.headers 

私はそれがフラッシュと私は、Webページをテストする必要があるいくつかの他のものをサポートしているのでChrome webdriverをを使用する必要があります。ここで私はセレンで、これまで持っているものです。

from selenium import webdriver 
driver = webdriver.Chrome() 
driver.get('https://login.comcast.net/login?r=comcast.net&s=oauth&continue=https%3A%2F%2Flogin.comcast.net%2Foauth%2Fauthorize%3Fclient_id%3Dxtv-account-selector%26redirect_uri%3Dhttps%3A%2F%2Fxtv-pil.xfinity.com%2Fxtv-authn%2Fxfinity-cb%26response_type%3Dcode%26scope%3Dopenid%2520https%3A%2F%2Flogin.comcast.net%2Fapi%2Flogin%26state%3Dhttps%3A%2F%2Ftv.xfinity.com%2Fpartner-success.html%26prompt%3Dlogin%26response%3D1&reqId=18737431-624b-44cb-adf0-2a85d91bd662&forceAuthn=1&client_id=xtv-account-selector') 
driver.find_element_by_css_selector('#user').send_keys('[email protected]') 
driver.find_element_by_css_selector('#passwd').send_keys('XXY') 
driver.find_element_by_css_selector('#passwd').submit() 
print driver.headers ### How to do this? 

私は、この情報(https://github.com/derekargueta/selenium-profiler)を取得するために、全セレンサーバーを実行することはお勧めいくつかの他の回答を見てきました。上記のWebdriverのようなものを使って、どうすればいいですか?

+0

手の込んだていただけますか?ありがとう。 – alecxe

+0

あなたはそれを箱から出すことはできません。 –

答えて

5

残念ながら、ではありません。この情報をSelenium webdriverから入手することはできません。近い将来、いつでも可能になります。出典:a very long conversation on the subject

この機能は実行されません。

開発者の意見ではwebdriverを「は、ブラウザを駆動」、およびその主要な目標の意志を超えてAPIを拡張するためのものであることを私は議論から集めるものとされた主な理由、の要旨、 APIの全体的な品質と信頼性を損なう原因となります。

私は上記のリンク先の会話など、多くの場所で提案見てきた一つの潜在的な回避策は、HTTPコンテンツを取り込むために使用することができ、BrowserMob Proxyを使用することで、can be used with selenium - リンクされている例は、Pythonを使用しませんが、セレンAPI。 a Python wrapper for BrowserMob Proxyがあるようですが、私は一度も使用していないので効力を保証することはできません。

+0

javascriptなどをページ内で実行してコンソールなどにログオンするとどうなりますか?そんなことをするための(ハッキリ)方法がありますか? – David542

+0

私がこのテーマで繰り返し見た1つの提案は、BrowserMob Proxyを使用することです:https://github.com/lightbody/browsermob-proxy、これはseleniumで使用できます:https://github.com/lightbody/browsermob-proxy #with-with-selenium。しかし、私はこのユーティリティの経験がありません。申し訳ありませんが、私はもっと助けになることができませんでした! – elethan

+0

@ David542また、私の更新された答えの最後の段落を参照してください。これには、BrowserMob Proxy用のPythonラッパーへのリンクが含まれています。 – elethan

-2

あなたはHTTPヘッダーデータを意味しています。これは実際にSeleniumのスコープではありません:Selenium automates browsers. That's it!あなたのブラウザでそれを行うことはできません(と私は何らかの方法がわからない)、セレンは、使用する間違ったツールです。ただし、JavaScriptでこれを行うことができる場合は、のようにdriver.execute_script(script, *args)を使用できます。

1

BrowserMob ProxyとSeleniumをバインドするPythonパッケージ(まだ開発中)であるMobilenium(https://github.com/rafpyprog/Mobilenium)を試すことができます。

使用例:あなたが抽出して何のためにしたくないものをヘッダ

>>> from mobilenium import mobidriver 
>>> 
>>> browsermob_path = 'path/to/browsermob-proxy' 
>>> mob = mobidriver.Firefox(browsermob_binary=browsermob_path) 
>>> mob.get('http://python-requests.org') 
301 
>>> mob.response['redirectURL'] 
'http://docs.python-requests.org' 
>>> mob.headers['Content-Type'] 
'application/json; charset=utf8' 
>>> mob.title 
'Requests: HTTP for Humans \u2014 Requests 2.13.0 documentation' 
>>> mob.find_elements_by_tag_name('strong')[1].text 
'Behold, the power of Requests' 
0

あなたはログを経由して、ヘッダを取得することができます(Mma's answerからソースを)

from selenium import webdriver 
import json 
driver = webdriver.PhantomJS(executable_path=r"your_path") 
har = json.loads(driver.get_log('har')[0]['message']) # get the log 
print('headers: ', har['log']['entries'][0]['request']['headers']) 
関連する問題