导读
前几篇文章,写了关于selenium 获取浏览器Network请求和响应的常用方法,那这篇就记录一下小编的个人使用,记录一下,以后或许还能用得上
正文
根据 selenium 之 driver.get_log、selenium 之 selenium-wire、selenium 之 Browsermob-Prox 这三中网络上常见的方法,其实不难发现,selenium-wire 与 Browsermob-Prox 的逻辑是十分相似的;结合个人的实际使用场景,小编这波的综合体 是把Browsermob-Prox 给丢弃了,于是出现了以下综合方案:
上干货!!!
class elementsMethod:
def drivers(self, _type, driverpath):
"""
:service : from selenium.webdriver.chrome.service import Service 要使用selenium 4.1.0 以上
:param driverpath:
:return:
"""
if _type == "1":
from seleniumwire import webdriver
else:
from selenium import webdriver
driverP = Service(r"{}".format(driverpath))
option = self.chrome_options(_type)
capabilitie = self.capabilities_options()
driver = webdriver.Chrome(desired_capabilities=capabilitie, options=option, service=driverP)
return driver
def chrome_options(self, _type):
"""定制的options让他看起来更像一个webapp页面"""
if _type == "1":
from seleniumwire import webdriver
else:
from selenium import webdriver
options = webdriver.ChromeOptions()
# # 打开控制台
# chrome_options.add_argument("--auto-open-devtools-for-tabs")
# 无界面模式
# options.add_argument('headless')
# 指定用户客户端-模拟手机浏览
# options.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"')
# 语言
options.add_argument('lang=zh_CN.UTF-8')
# 禁用图片加载
# options.add_argument('blink-settings=imagesEnabled=false')
# Chrome 添加参数 log-level
options.add_argument('--log-level=3')
# 隐身模式(无痕模式)
options.add_argument('incognito')
# 自动打开开发者工具
# options.add_argument("auto-open-devtools-for-tabs")
# 设置窗口尺寸,注意宽高之间使用逗号而不是x
options.add_argument('window-size=1024,768')
# 设置窗口启动位置(左上角坐标)
options.add_argument('window-position=0,0')
# 禁用gpu渲染
# options.add_argument('disable-gpu')
# 全屏启动
# options.add_argument('start-fullscreen')
# 全屏启动,无地址栏
# options.add_argument('kiosk')
# 启动时,不激活(前置)窗口
# options.add_argument('no-startup-window')
# 去掉开发者警告
options.add_experimental_option('useAutomationExtension', False)
# 去掉黄条
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument('--ignore-certificate-errors-spki-list')
options.add_argument('--no-sandbox')
options.add_experimental_option('perfLoggingPrefs', {'enableNetwork': True})
return options
def capabilities_options(self):
caps = DesiredCapabilities.CHROME
# 记录性能日志
caps['goog:loggingPrefs'] = {'performance': 'ALL'}
return caps
细心的同学 是不是已经发现了!!!
if _type == "1":
from seleniumwire import webdriver
else:
from selenium import webdriver
整个方法封装的重点,就在于上述那么4行代码!! 就把 driver.get_log 跟 selenium-wire 根据场合随意切换使用;到这里,应该也会有很多小伙伴有同样的疑问:为什么 用driver.get_log 还要selenium-wire呢?根据 window 11 的运行结果来看 selenium-wire 应该是未来的趋势,另外一点,driver.get_log 限制其实会比较多,没有selenium-wire灵活方便 欢迎各位分享,或指正确,让driver 封装的更强大