python爬虫源码:selenium+browsermobproxy实现浏览器请求抓取

前言

如上篇博客所述:为了抓取所有,通过浏览器F12可以看到的资源(静态资源和接口调用),我使用了selenium+browsermobproxy的方案来处理。

这是两个模块的安装方案,没有看过的朋友可以去了解一下:

python爬虫:selenium+browsermobproxy实现浏览器请求抓取(模块安装详解)-CSDN博客

下面是我编写的一些python代码,可以帮助你尽快入门:

代码

python 复制代码
# encoding=utf-8

from browsermobproxy import Server
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time
import json

# 启动BrowserMob Proxy
server = Server(r"E:\其他源码\browsermob-proxy-2.1.4-bin\browsermob-proxy-2.1.4\bin\browsermob-proxy.bat")  # 替换为BrowserMob Proxy的路径
server.start()

# 使用网络代理,如果你需要的话
# proxy = server.create_proxy({"httpProxy":"127.0.0.1:7890"})
proxy = server.create_proxy()

# 设置Chrome WebDriver
chrome_service = Service(r"E:\其他源码\chromedriver-win64\chromedriver.exe")  # 替换为WebDriver的路径

chrome_options = Options()
chrome_options.add_argument("--proxy-server={0}".format(proxy.proxy))

# 解决 您的连接不是私密连接问题
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--ignore-urlfetcher-cert-requests')

driver = webdriver.Chrome(service=chrome_service, options=chrome_options)


# 设置代理捕获HAR数据
proxy.new_har("comic_order", options={'captureHeaders': True, 'captureContent': True})
# 访问链接A(需要触发POST请求的页面)
driver.get(f"https://xxxxxxxxxxxxxx")  # 替换为实际的初始页面URL

# 可能需要等待页面加载
time.sleep(15)  # 可以根据需要调整等待时间

# 处理可能的弹出窗口操作,手动或自动化操作,取决于您的具体网站逻辑
# 例如,假设点击某个按钮会弹出窗口
# driver.find_element(By.ID, "your_button_id").click()  # 根据具体情况选择元素并点击

# 你可能只需要每次抓取众多响应中的某个接口数据
target_url = 'http://xxxxxxxxxxx'

# 获取并分析HAR数据
har_data = proxy.har
for entry in har_data['log']['entries']:
    req = entry['request']
    url = req['url']
    if url == target_url and entry['response']:
        try:
            # 获取接口数据
            result = json.loads(entry['response']['content']['text'])  # 解析为JSON格式
            print("解析后的JSON内容:", result)

            # 加入 接下来需要对数据进行处理的操作
            print('do something?')

        except json.JSONDecodeError as e:
            print("解析JSON失败:", e)
        except Exception as e:
            print(e)

        break

# 关闭浏览器和代理服务器
driver.quit()
server.stop()
相关推荐
安冬的码畜日常3 小时前
【JUnit实战3_17】第九章:容器内测试(下)——Arquillian 框架的用法简介
测试工具·junit·单元测试·junit5·arquillian·容器内测试·in-container
晷昃11 小时前
抓包工具:proxyman的使用方法
测试工具
绒绒毛毛雨14 小时前
爬虫前奏--基于macos的ip代理池构建
爬虫·tcp/ip·macos
程序员杰哥14 小时前
Pytest之收集用例规则与运行指定用例
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
B站_计算机毕业设计之家15 小时前
基于大数据的短视频数据分析系统 Spark哔哩哔哩视频数据分析可视化系统 Hadoop大数据技术 情感分析 舆情分析 爬虫 推荐系统 协同过滤推荐算法 ✅
大数据·hadoop·爬虫·spark·音视频·短视频·1024程序员节
一晌小贪欢16 小时前
Python爬虫第10课:分布式爬虫架构与Scrapy-Redis
分布式·爬虫·python·网络爬虫·python爬虫·python3
疏狂难除17 小时前
关于spiderdemo第二题的奇思妙想
javascript·爬虫
平淡是真_18 小时前
软件测试(五)--自动化测试Selenium(一)
selenium·测试工具
Run Freely93719 小时前
selenium_web自动化测试_02_元素操作
selenium·测试工具
newxtc21 小时前
【重庆政务服务网-注册_登录安全分析报告】
人工智能·selenium·测试工具·安全·政务