2016-10-05 28 views
6

Tôi đang cố gắng lấy các tiêu đề trong trình duyệt web selenium. Một cái gì đó tương tự như sau:Làm thế nào để lấy tiêu đề trong python selenium-webdriver

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

tôi cần phải sử dụng Chrome webdriver vì nó hỗ trợ đèn flash và một số thứ khác mà tôi cần phải thử nghiệm một trang web. Dưới đây là những gì tôi có cho đến nay trong Selenium:

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? 

Tôi đã thấy một số câu trả lời khác mà khuyên bạn nên chạy toàn bộ máy chủ selen để có được thông tin này (https://github.com/derekargueta/selenium-profiler). Làm thế nào tôi sẽ nhận được nó bằng cách sử dụng một cái gì đó tương tự như ở trên với Webdriver?

+0

Ông có thể xin hãy giải thích những gì tiêu đề nào bạn muốn trích xuất và để làm gì? Cảm ơn. – alecxe

+0

Chắc chắn rằng bạn không thể làm điều đó ra khỏi hộp. –

Trả lời

5

Thật không may, bạn không thể nhận thông tin này từ trình quản trị web Selenium, cũng như bạn sẽ không thể sử dụng bất kỳ lúc nào trong tương lai gần. Đoạn trích từ a very long conversation on the subject:

Tính năng này sẽ không xảy ra.

Lý do chính là, từ những gì tôi thu thập từ cuộc thảo luận, rằng trình quản trị web có nghĩa là "hướng trình duyệt" và mở rộng API ngoài mục tiêu chính đó, theo ý kiến ​​của các nhà phát triển , làm cho chất lượng và độ tin cậy tổng thể của API bị ảnh hưởng.

Một giải pháp tiềm năng mà tôi đã thấy được đề xuất ở một số địa điểm, kể cả cuộc trò chuyện được liên kết ở trên, là sử dụng BrowserMob Proxy, có thể được sử dụng để chụp nội dung HTTP và can be used with selenium - mặc dù ví dụ được liên kết không sử dụng Python API selenium. Dường như có a Python wrapper for BrowserMob Proxy, nhưng tôi không thể xác minh hiệu quả của nó vì tôi chưa bao giờ sử dụng nó.

+0

điều gì về việc thực thi javascript hoặc một cái gì đó trong trang để đăng nhập vào bảng điều khiển hoặc thứ gì đó? Có cách nào (hackish) để làm điều gì đó như thế không? – David542

+0

Một gợi ý tôi đã thấy nhiều lần về chủ đề này là sử dụng Proxy BrowserMob: https://github.com/lightbody/browsermob-proxy, có thể được sử dụng với selenium: https://github.com/lightbody/browsermob-proxy # sử dụng-với-selen. Tuy nhiên, tôi không có kinh nghiệm với tiện ích này. Xin lỗi tôi không thể giúp đỡ nhiều hơn nữa! – elethan

+0

@ David542 cũng xem đoạn cuối của câu trả lời cập nhật của tôi. Nó bao gồm một liên kết đến một wrapper Python cho Proxy BrowserMob, có thể làm việc cho trường hợp sử dụng của bạn. – elethan

-2

Bạn có nghĩa là dữ liệu tiêu đề HTTP, phải không? Điều này không thực sự là phạm vi của Selenium: Selenium automates browsers. That's it! Vì vậy, nếu bạn không thể làm điều đó với trình duyệt của bạn (và tôi không biết bất kỳ cách nào), Selenium là công cụ sai để sử dụng. Tuy nhiên, nếu bạn có thể làm điều đó bằng JavaScript, bạn có thể sử dụng driver.execute_script(script, *args) như được giải thích here.

1

Bạn có thể thử Mobilenium (https://github.com/rafpyprog/Mobilenium), một gói python (vẫn đang trong quá trình phát triển) liên kết với BrowserMob Proxy và Selenium.

Một ví dụ sử dụng:

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

Bạn có thể lấy tiêu đề thông qua log (nguồn từ 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']) 
Các vấn đề liên quan