selenium-python如何捕获网络流量的响应
您可以访问浏览器或chromedriver日志,它们在网络响应方面略有不同。称为浏览器日志,称为performance驱动程序日志driver。它们返回一个类似json的对象,您可以解析该对象以使用其中的Network方法提取事件:
{’level’: ’INFO’, ’message’: ’{'message':{'method':'Page.frameStoppedLoading','params':{'frameId':'FB10764A3ABF7FFC83110C39C5F7BF77'}},'webview':'C2D13BD13CF743B6D0695B35E9CC935C'}’, ’timestamp’: 1538607113832}, {’level’: ’INFO’, ’message’: ’{'message':{'method':'Page.frameDetached','params':{'frameId':'FB10764A3ABF7FFC83110C39C5F7BF77'}},'webview':'C2D13BD13CF743B6D0695B35E9CC935C'}’, ’timestamp’: 1538607113838}, {’level’: ’INFO’, ’message’: ’{'message':{'method':'Network.requestwillBeSent','params':{'documentURL':'https://stackoverflow.com/questions/52633697/selenium-python-how-to-capture-network-traffics-response','frameId':'C2D13BD13CF743B6D0695B35E9CC935C','hasUserGesture':false,'initiator':{'type':'other'},'loaderId':'5331BFDC4F466FCED920CFC9F033D2EC','request':{'headers':{'Upgrade-Insecure-Requests':'1','User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'},'initialPriority':'VeryHigh','method':'GET','mixedContentType':'none','referrerPolicy':'no-referrer-when-downgrade','url':'https://stackoverflow.com/questions/52633697/selenium-python-how-to-capture-network-traffics-response'},'requestId':'5331BFDC4F466FCED920CFC9F033D2EC','timestamp':104499.729,'type':'Document','wallTime':1538607113.838206}},'webview':'C2D13BD13CF743B6D0695B35E9CC935C'}’, ’timestamp’: 1538607113839},...}
您需要启用登录DesiredCapabilities,然后使用JSON模块进行解析:
import jsonfrom selenium import webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiescaps = DesiredCapabilities.CHROMEcaps[’loggingPrefs’] = {’performance’: ’ALL’}driver = webdriver.Chrome(desired_capabilities=caps)driver.get(’https://stackoverflow.com/questions/52633697/selenium-python-how-to-capture-network-traffics-response’)def process_browser_log_entry(entry): response = json.loads(entry[’message’])[’message’] return responsebrowser_log = driver.get_log(’performance’) events = [process_browser_log_entry(entry) for entry in browser_log]events = [event for event in events if ’Network.response’ in event[’method’]]
我不知道是否可以使用此方法访问响应数据本身,但是可以获取响应的URL。
解决方法我正在使用pythonDjango创建一个Web应用程序。我正在使用selenium来启动无头浏览器(phantomjs)并单击几次,直到到达特定页面。我希望捕获网络流量并获得特定网络呼叫的响应。该网络调用实际上包含一个html文档作为其响应。
有什么办法可以做到这一点?
相关文章:
1. IDEA 2020.1 版自动导入MAVEN依赖的方法(新版MAVEN无法自动导入/更新POM依赖、MAVEN设置自动更新、自动更新快捷键)2. Java多线程通信wait()和notify()代码实例3. 开发Java的又一利器-Visual Cafe4. IDEA 程序包不存在,找不到符号但是明明存在对应的jar包(问题分析及解决方案)5. SublimeText3配置PHP函数追踪定位插件6. 解决vue watch数据的方法被调用了两次的问题7. IDEA标签tabs多行显示的设置8. 详解idea中web.xml默认版本问题解决9. javascript将扁平的数据转为树形结构的高效率算法10. Java实现Windows计算器界面
![IDEA 2020.1 版自动导入MAVEN依赖的方法(新版MAVEN无法自动导入/更新POM依赖、MAVEN设置自动更新、自动更新快捷键)](http://www.haobala.com/attached/image/news/202309/1051560956.png)