python selenium 獲取接口數(shù)據(jù)的實(shí)現(xiàn)
python selenium 獲取接口數(shù)據(jù)。
selenium沒有直接提供查詢的函數(shù),但是可以通過webdriver提供的API查詢,使用的函數(shù)是Network.getResponseBody
webdriver提供的API文檔:https://chromedevtools.github.io/devtools-protocol/tot/Network/
Network.getResponseBody文檔說明:
Network.getResponseBody的參數(shù)是requestid,requestid是webdriver每個(gè)請(qǐng)求自動(dòng)生成的惟一ID,拿到requestid就能拿到請(qǐng)求返回的內(nèi)容。
如何獲取requestid?創(chuàng)建webdriver對(duì)象時(shí)配置信息設(shè)置獲取performance,即可獲取每個(gè)請(qǐng)求的日志信息,然后通過對(duì)日志信息的檢索找到對(duì)應(yīng)的requestid。
獲取日志信息的webdriver創(chuàng)建代碼(注意,必須傳入配置信息才能獲取日志信息):
from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities import time caps = { 'browserName': 'chrome', 'loggingPrefs': { 'browser': 'ALL', 'driver': 'ALL', 'performance': 'ALL', }, 'goog:chromeOptions': { 'perfLoggingPrefs': { 'enableNetwork': True, }, 'w3c': False, }, } driver = webdriver.Chrome(desired_capabilities=caps) driver.get('https://partner.oceanengine.com/union/media/login/') # 必須等待一定的時(shí)間,不然會(huì)報(bào)錯(cuò)提示獲取不到日志信息,因?yàn)樾踹兜人姓?qǐng)求結(jié)束才能獲取日志信息 time.sleep(3) request_log = driver.get_log('performance')
打印request_log是一個(gè)數(shù)組,然后遍歷request_log檢索需要獲取的url對(duì)應(yīng)的requestid,比如需要獲取https://s3.pstatp.com/bytecom/resource/union_web2/media/manifest.json對(duì)應(yīng)的requestid,并且獲取接口內(nèi)容:
for i in range(len(request_log)): message = json.loads(request_log[i]['message']) message = message['message']['params'] # .get() 方式獲取是了避免字段不存在時(shí)報(bào)錯(cuò) request = message.get('request') if(request is None): continue url = request.get('url') if(url == "https://s3.pstatp.com/bytecom/resource/union_web2/media/manifest.json"): # 得到requestId print(message['requestId']) # 通過requestId獲取接口內(nèi)容 content = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': message['requestId']}) print(content) break
完整代碼:
import json from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities import time caps = { 'browserName': 'chrome', 'loggingPrefs': { 'browser': 'ALL', 'driver': 'ALL', 'performance': 'ALL', }, 'goog:chromeOptions': { 'perfLoggingPrefs': { 'enableNetwork': True, }, 'w3c': False, }, } driver = webdriver.Chrome(desired_capabilities=caps) driver.get('https://partner.oceanengine.com/union/media/login/') # 必須等待一定的時(shí)間,不然會(huì)報(bào)錯(cuò)提示獲取不到日志信息,因?yàn)樾踹兜人姓?qǐng)求結(jié)束才能獲取日志信息 time.sleep(3) request_log = driver.get_log('performance') print(request_log) for i in range(len(request_log)): message = json.loads(request_log[i]['message']) message = message['message']['params'] # .get() 方式獲取是了避免字段不存在時(shí)報(bào)錯(cuò) request = message.get('request') if(request is None): continue url = request.get('url') if(url == "https://s3.pstatp.com/bytecom/resource/union_web2/media/manifest.json"): # 得到requestId print(message['requestId']) # 通過requestId獲取接口內(nèi)容 content = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': message['requestId']}) print(content) break
到此這篇關(guān)于python selenium 獲取接口數(shù)據(jù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python selenium 獲取接口數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python QT界面關(guān)閉線程池的線程跟隨退出完美解決方案
這篇文章主要介紹了python QT界面關(guān)閉,線程池的線程跟隨退出解決思路方法,本文給大家分享兩種方法結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11淺談Python小波分析庫Pywavelets的一點(diǎn)使用心得
這篇文章主要介紹了淺談Python小波分析庫Pywavelets的一點(diǎn)使用心得,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python數(shù)據(jù)分析庫PyGWalker的強(qiáng)大交互式功能界面探索
這篇文章主要介紹了Python數(shù)據(jù)分析庫PyGWalker的強(qiáng)大交互式功能界面探索有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01全面掌握Python?JSON庫函數(shù)與方法學(xué)會(huì)JSON數(shù)據(jù)處理
Python提供了內(nèi)置的JSON庫,允許在Python中解析和序列化JSON數(shù)據(jù),本文將深入研究Python中JSON庫的各種函數(shù)和方法,為你提供豐富的示例代碼來幫助掌握J(rèn)SON處理的方方面面2024-01-01