使用python3+selenium+browsermob-proxy-2.1.4 模拟浏览器开发者模式 Network中的抓包

首先,先安装和下载browsermob-proxy,目前最新版是2.1.4

安装方法:pip3 install browsermob-proxy
在这里插入图片描述
下载地址:https://github.com/lightbody/browsermob-proxy/releases
在这里插入图片描述

注:先使用pip命令安装browsermob-proxy,然后根据上述地址下载二进制文件到本地,程序运行需要读取该二进制文件。

Windows使用示例

# -*- coding: utf-8 -*-
# 导入相应的库
from browsermobproxy import Server
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import json
from pprint import pprint

base_url = 'https://item.jd.com/7670969.html'

# browsermob-proxy.bat就是刚才下载的文件解压得来,路径根据自己实际的进行修改,我这里是解压放到了Dp盘;port为端口,根据自己情况进行修改,我这里顺便写入了8739
server = Server('D:\\browsermob-proxy-2.1.4\\bin\\browsermob-proxy.bat', {'port': 8739})
server.start()
proxy = server.create_proxy()

chrome_options = Options()
# 无浏览器界面,根据自己实际情况是否使用,我这里使用浏览器界面,故注释了这行代码
# chrome_options.add_argument('--headless')

# 不加载图片,提升运行速度
# chrome_options.add_argument('blink-settings=imagesEnabled=false') 

chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36')
# 需要加上这句代码,否则有些网页会被浏览器拦截了。实际如何,看大家在用的过程的情况
chrome_options.add_argument('--ignore-certificate-errors')

# 设置代理
chrome_options.add_argument('--proxy-server={0}'.format(proxy.proxy))

driver = webdriver.Chrome(options=chrome_options)

proxy.new_har('html_list', options={'captureContent': True})
# 也可以以目标URL配置一个新的HAR并获取HAR内容
# proxy.new_har(base_url)

driver.get(base_url)

# 暂停几秒等待页面加载完成,防止拿不到结果
proxy.wait_for_traffic_to_stop(1, 30)
result = proxy.har

# pprint(result)

'''
open(filename[, mode[, buffering]])函数参数的说明:
name : 一个包含了你要访问的文件名称的字符串值。
mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

不同模式打开文件的参照:
    r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    r+:打开一个文件用于读写。文件指针将会放在文件的开头。
    
    b:二进制模式,多用于图片读写。
    +:打开一个文件进行更新(可读可写)。
    
    w:打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    w+:打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    
    a:打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ……
'''
with open('./file/proxy.har', 'w') as f:
    json.dump(result, f)

# 把 包即url地址 存到txt文件中
with open('./file/request_url.txt', 'a') as u:
    for ent in result['log']['entries']:
        url = ent['request']['url']
        # json.dump(url, u)#这种方式保存的内容会放在双引号中,即格式为:“写入的内容”
        u.write(url + '\n')#这种方式内容不会放在双引号中,使用那种方式存储内容看大家喜欢。

server.stop()
driver.quit()

打开proxy.har文件,如图:
在这里插入图片描述

打开request_url.txt文件,如图:
在这里插入图片描述
随便找一个地址搜索对比,如图:
在这里插入图片描述
在这里插入图片描述
发现可以获得想要的包,跟在浏览器开发者模式 Network中看到的是一样的。我这里地址后面的参数由于是时时的,每次刷新都会不一样,所以参数会不同,但是不影响最后的结果。

不过此办法好像没办法对已经打开的浏览器配置代理信息。也就是说,页面需要登录后,进行页面跳转啥的,这种办法会报错,还得研究研究看看是否可以实现。

文章仅供学习使用。如有不好之处,欢迎指出修改,彼此共同学习进步。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值