首页 > 编程知识 正文

如何通过Python+Selenium+PhantomJS/Chrome获取HTTP状态和Response Headers

时间:2023-05-06 10:20:05 阅读:209436 作者:4447

Selenium没有提供获取HTTP状态码的API,并且似乎以后也不准备提供该功能,还好有变通的方法。这里提供Python+Selenium+PhantomJS的实现供参考:

# Python 2.7from selenium import webdriver import jsonfrom collections import OrderedDictdef getResponseHeaders(browser): har = json.loads(browser.get_log('har')[0]['message']) return OrderedDict(sorted([(header["name"], header["value"]) for header in har['log']['entries'][0]['response']["headers"]], key = lambda x: x[0]))def getResponseStatus(browser): har = json.loads(browser.get_log('har')[0]['message']) return (har['log']['entries'][0]['response']["status"], str(har['log']['entries'][0]['response']["statusText"]))browser = webdriver.PhantomJS()# Simple Testprint ">>>>> 404"browser.get("http://www.questionfish.cn/notfound.html")print "status: ", getResponseStatus(browser)headers = getResponseHeaders(browser)for key in headers: print key, "=>", headers[key]print

Python+Selenium+ChromeDriver当然也有解决方法:

from selenium import webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesimport jsond = DesiredCapabilities.CHROMEd['loggingPrefs'] = { 'performance':'ALL' }def getHttpStatus(browser): for responseReceived in browser.get_log('performance'): try: response = json.loads(responseReceived[u'message'])[u'message'][u'params'][u'response'] if response[u'url'] == browser.current_url: return (response[u'status'], response[u'statusText']) except: pass return Nonedef getHttpResponseHeader(browser): for responseReceived in browser.get_log('performance'): try: response = json.loads(responseReceived[u'message'])[u'message'][u'params'][u'response'] print if response[u'url'] == browser.current_url: return response[u'headers'] except: pass return Nonebrowser = webdriver.Chrome(desired_capabilities=d)url = 'http://www.questionfish.cn/notfound.html'browser.get(url)print getHttpStatus(browser)# 因get_log后旧的日志将被清除,两个函数切勿同时使用# print getHttpResponseHeader(browser)browser.quit()

REF: How to get status code by using selenium.py (python code) - Stack Overflow

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。