当前位置: 首页 > news >正文

北京小学大兴网站建设河北省网站备案系统

北京小学大兴网站建设,河北省网站备案系统,用文本文档做网页,wordpress视频站代码selenium的官方不提供获取状态码,Conten-Type,以及重定向路径的方法,并且官方说这些功能将来也不会有。java - How to get HTTP Response Code using Selenium WebDriver - Stack Overflow 非官方的方法大概有下面几种 1.通过requests重新请…

selenium的官方不提供获取状态码,Conten-Type,以及重定向路径的方法,并且官方说这些功能将来也不会有。java - How to get HTTP Response Code using Selenium WebDriver - Stack Overflow

非官方的方法大概有下面几种

1.通过requests重新请求一遍url,获取response里面的状态码

2.通过中间代理服务器来获取,比如selenium-wire,selenium-wire里面内建了一个代理服务器,通过代理服务器可以获取各个请求的状态码

3.通过分析chrome的performance log来获取状态码以及重定向路径

1的方法会多访问一遍网络,并且不能支持mata或js的重定向。2的方法只访问一次网络,但同样不能支持mata或js的重定向,只有3的方法只访问一次网络可以获取所有的状态。

并且1的方法在python环境上打开一些https网站还有如下bug

ssl.SSLError: [SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled (_ssl.c:1131) · Issue #2653 · urllib3/urllib3 · GitHuby

 这个问题的原因是This error comes up when using OpenSSL 3 to connect to a server which does not support it. The solution is to downgrade the cryptography package in python:

  python - SSL error unsafe legacy renegotiation disabled - Stack Overflow

要么修改openssl.cnf,要么降级cryptography,要么设置ctx,根据我测试的结果只有修改cnf才能彻底解决,最简单的方法是在cnf后面加上Options = UnsafeLegacyRenegotiation

如果使用docker应该写成这样

RUN echo 'Options = UnsafeLegacyRenegotiation' >> /usr/lib/ssl/openssl.cnf

如何通过performance log来获取状态

performanceLog.py

import jsondef getHeader(headers,header):for key,value in headers.items():if key.lower()==header:return valuereturn ''
def getRedirectPath(driver):redirctPath=[]requestDic={}frameId=Nonefor entry_json in driver.get_log('performance'):entry = json.loads(entry_json['message'])# print(entry)if entry['message']['method'] == 'Network.requestWillBeSent':if entry['message']['params']['loaderId']==entry['message']['params']['requestId'] and (frameId is None or frameId==entry['message']['params']['frameId']):# print(entry)if frameId is None:frameId=entry['message']['params']['frameId']if entry['message']['params']['redirectHasExtraInfo']:# 设置重定向前的状态item=redirctPath[len(redirctPath)-1]item['status']=entry['message']['params']['redirectResponse']['status']item['reason']='location'item['contentType']=getHeader(entry['message']['params']['redirectResponse']['headers'],'content-type')item={'url':entry['message']['params']['request']['url'],'status':'','reason':'','contentType':''}requestDic[entry['message']['params']['requestId']]=itemredirctPath.append(item)elif entry['message']['method'] == 'Network.responseReceived' and entry['message']['params']['requestId'] in requestDic:# print(entry)item=requestDic[entry['message']['params']['requestId']]item['status']=entry['message']['params']['response']['status']item['contentType']=getHeader(entry['message']['params']['response']['headers'],'content-type')elif entry['message']['method'] == 'Page.frameRequestedNavigation' and frameId==entry['message']['params']['frameId']:# print(entry)# 设置重定向前的状态item=redirctPath[len(redirctPath)-1]item['reason']=entry['message']['params']['reason']return redirctPath

 后来发现一些网站不能获取contentType,原因是header需要忽略大小写,修改了一下代码。当然你自己修改代码后可以获取任何你需要的header。

各个事件的顺序大致如下

Page.frameStartedLoading
Network.requestWillBeSent
Network.responseReceived
Network.dataReceived
Page.frameNavigated
Network.requestServedFromCache
Network.loadingFinished
Network.resourceChangedPriority
Page.domContentEventFired
Network.loadingFailed
Page.loadEventFired
Page.frameStoppedLoading

注释:Page.frameScheduledNavigation已经被废弃,改成Page.frameRequestedNavigation

官方对performance log的文档很少,在网上也没有找到类似的讨论,上面的代码完全是我根据数据分析出来的,目前看来是对的,如果不对请告诉我。 

Chrome DevTools Protocol - version 1-2 - Page domain

 测试代码

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
from performanceLog import getRedirectPathcaps = DesiredCapabilities.CHROME
caps['goog:loggingPrefs'] = {'performance': 'ALL'}
options = webdriver.ChromeOptions()
# 必须是headless=new,否则download.default_directory不起作用
options.add_argument('--headless=new')
# 下面这些参数是必须的,否则可能出错
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')driver = webdriver.Chrome(options=options,desired_capabilities=caps)driver.get('http://localhost/redirect')
# 必须等待几秒钟,否则metaTagRefresh不起作用
time.sleep(3)print(getRedirectPath(driver))
driver.quit()

输出结果

[{
    'url': 'http://localhost/redirect',
    'status': 302,
    'reason': 'location',
    'contentType': 'text/html; charset=utf-8'
}, {
    'url': 'http://localhost/static/index3.html',
    'status': 200,
    'reason': 'scriptInitiated',
    'contentType': 'text/html'
}, {
    'url': 'http://localhost/static/redirect.html',
    'status': 200,
    'reason': 'metaTagRefresh',
    'contentType': 'text/html'
}, {
    'url': 'http://localhost/',
    'status': 200,
    'reason': '',
    'contentType': 'text/html; charset=utf-8'
}]

可以看出这里面有3种不同类型的重定向,location的通常的重定向,后面2种用requests或者代理都无法获取。

location:response header里面的location重定向

scriptInitiated:js重定向

metaTagRefresh:meta tag重定向

http://www.yayakq.cn/news/756509/

相关文章:

  • 网站的维护与更新免费公司网站建设
  • 半岛官方网站下载营销的手段和方法
  • 企业网站建设研究怎样建设一个能上传数据的网站
  • 影音先锋资源网站建设专业婚纱摄影网站制作
  • 科技术语有哪些网站优化 毕业设计
  • 最新钓鱼网站源码云南省网站建设收费调查报告论文
  • 鸿邑网站建设网址大全4399
  • 男做基视频网站南山商城网站建设哪家服务周到
  • 做网站优化推广多少钱网站自己做还是找公司
  • 小说网站建设费用返利网app网站开发
  • 俄语网站都哪些推广普通话奋进新征程演讲稿
  • 广州免费设计网站建设精品资源共享课程网站建设论文
  • 网站设计时间网站建设维护知识
  • 丹灶做网站专业分销网站建设
  • 怎么做买东西的网站互联网舆情分析
  • 制作微网站的平台四川省住房和建设厅网站
  • 建设厅网站关于建筑资质合并ui设计的作用
  • 清风算法受影响的网站网站qq在线状态
  • 网站建设需要会什么软件有哪些方面网站各类模块内容说明
  • 河东做网站沈阳网站建设求职简历
  • 湖南网站建设360o江苏省建设局报考网站
  • 即墨专业医院网站制作公司网站建设实训结论
  • 佛山个性化网站开发平面设计有什么网站
  • 中山网站建设文化咨询备案域名出售是否违法
  • html5旅游网站怎么制做网站
  • 研学网站平台建设方案工业产品设计是科学技术与什么的融合
  • 高速公路建设网站wordpress部份变英文
  • 港口建设网站自己建网站能赚钱吗
  • 学做面包到什么网站中小企业erp系统哪个好
  • 泉州响应式网站建设协会网站制作