一、安装
# 进入虚拟环境
workon  xxxx 
pip install selenium
二、安装驱动
  • 查询自己浏览器版本
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --versionGoogle Chrome 138.0.7204.93
  • 下载对应的驱动,其他版本
sudo mv ~/Downloads/chromedriver /usr/local/bin/
sudo chmod +x /usr/local/bin/chromedriver# 查询版本
chromedriver --version
ChromeDriver 138.0.7204.49 (d2b48fd5f7813ed477a2d68fa232b8178fa4fb1e-refs/branch-heads/7204@{#1814})
三、打开使用,第一次打开加载很久
from selenium import webdriver
from selenium.webdriver.common.by import By# 使用 Chrome
driver = webdriver.Chrome()  # 如果驱动在PATH中# 访问网页
driver.get("https://www.baidu.com")# 获取页面标题
title = driver.title
print(driver.title)driver.quit()   # 关闭所有窗口并退出驱动
四、优化加载,提高打开速度
from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsoptions = Options()
options.add_argument("--no-sandbox")  # 禁用沙盒(安全性降低,但速度提升)
options.add_argument("--disable-dev-shm-usage")  # 避免共享内存问题
options.add_argument("--disable-extensions")  # 禁用扩展
options.add_argument("--disable-gpu")  # 禁用GPU加速(某些系统需要)
options.add_argument("--window-size=1920,1080")  # 固定窗口大小
options.add_argument("--user-data-dir=/tmp/chrome-test-profile")
# options.add_argument("--incognito")
# options.add_argument("--disable-software-rasterizer")  # 禁用软件渲染
# options.add_argument("--disable-backgrounding-occluded-windows")driver = webdriver.Chrome(options=options)
五、获取页面请求数据
  • 通过 Chrome DevTools 捕获网络请求(仅限 Chrome/Edge)
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options# 启用 Chrome DevTools
chrome_options = Options()
chrome_options.add_argument("--enable-logging")
chrome_options.add_argument("--log-level=0")
chrome_options.set_capability("goog:loggingPrefs", {"performance": "ALL"})driver = webdriver.Chrome(options=chrome_options)# 开始监听网络请求
driver.execute_cdp_cmd("Network.enable", {})# 访问目标页面
driver.get("https://example.com")# 获取所有网络请求日志
logs = driver.get_log("performance")
for log in logs:print(log)  # 原始日志(JSON 格式)# 提取关键信息(如请求 URL、状态码)
for log in logs:message = log.get("message", '{}')message = json.loads(message)['message']method = messgae['method']params = messgae['params']if "Network.requestWillBeSent" in message:print("Request URL:", message.get("params", {}).get("request", {}).get("url"))elif "Network.responseReceived" in message:print("Status Code:", message.get("params", {}).get("response", {}).get("status"))# 关闭浏览器
driver.quit()
六、常用命令
  • 浏览器操作
# 前进和后退
driver.forward()
driver.back()# 刷新页面
driver.refresh()# 获取当前URL
current_url = driver.current_url# 获取页面标题
title = driver.title# 获取页面源代码
source = driver.page_source# 关闭浏览器
driver.close()  # 关闭当前窗口
driver.quit()   # 关闭所有窗口并退出驱动
  • 文件上传
# 找到文件上传input元素
upload_element = driver.find_element(By.XPATH, "//input[@type='file']")# 发送文件路径
upload_element.send_keys("/path/to/file.txt")# 图片
driver.get("https://image.baidu.com/")
driver.find_element(By.XPATH, '//*[@id="sttb"]/img[1]').click()
driver.find_element(By.ID, "stfile").send_keys("/path/to/image.png")
  • 窗口和标签页操作
# 获取当前窗口句柄
current_window = driver.current_window_handle# 获取所有窗口句柄
all_windows = driver.window_handles# 切换到新窗口
for window in all_windows:if window != current_window:driver.switch_to.window(window)# 打开新标签页
driver.execute_script("window.open('');")# 切换回原窗口
driver.switch_to.window(current_window)# 设置窗口大小
driver.set_window_size(1024, 768)# 最大化窗口
driver.maximize_window()
七、cookies管理
  • 获取所有 cookies
from selenium import webdriverdriver = webdriver.Chrome()
driver.get("https://example.com")# 获取当前页面的所有cookies
all_cookies = driver.get_cookies()
print(all_cookies)
  • 添加 Cookies
cookie = {'name': 'test_cookie','value': '12345','domain': 'example.com','path': '/','secure': True
}driver.add_cookie(cookie)
  • 删除cookie
# 删除特定 cookie
driver.delete_cookie("cookie_name")# 删除所有 cookies
driver.delete_all_cookies()
  • 使用 Cookies 保持登录状态
# 第一次登录并保存cookies
driver.get("https://example.com/login")
# 执行登录操作...
cookies = driver.get_cookies()# 关闭浏览器后重新打开
driver.quit()
driver = webdriver.Chrome()# 先访问网站再添加cookies
driver.get("https://example.com")
for cookie in cookies:driver.add_cookie(cookie)# 刷新页面,现在应该已登录
driver.refresh()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87358.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87358.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87358.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI 开发平台:中小企业的创新破局点在哪里?

在浙江义乌的一个小商品加工厂里,老板王建国最近有点烦。订单量忽高忽低,原材料价格波动不定,他想通过数据分析提前规划生产,却苦于没有专业的技术团队;在广东东莞的一家电子配件公司,业务员李娜每天要处理…

.NET 8.0 Redis 教程

一、环境准备 1. 安装 Redis 服务器 Windows/macOS/Linux:使用 Docker 快速部署 bash docker run -d --name redis -p 6379:6379 redisLinux:直接安装 bash sudo apt-get install redis-server sudo systemctl start redis-server2. 创建 .NET 项目 b…

2025年游戏鼠标推荐,游戏鼠标推荐,打CSGO(罗技、雷蛇、卓威、ROG、漫步者、赛睿、达尔优)

可能很多人对于游戏鼠标的了解还是不够深,会有很多疑问,比如:“游戏鼠标和办公鼠标的区别”、“游戏鼠标无线好还是有线好”等等一系列的问题,本文将会介绍游戏鼠标领域处于领先地位的几个厂家:罗技鼠标、雷蛇鼠标、赛…

OpenCV CUDA模块设备层-----在 GPU上高效地执行两个uint类型值的最小值比较函数vmin2()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 OpenCV 的CUDA模块(cudev) 中的一个设备端内联函数,用于在GPU上高效地执行两个uint类型值的最小值比较。 该函…

Web3与传统网络安全模型对比:关键差异解析

随着互联网技术的飞速发展,Web3的概念逐渐成为人们关注的焦点。Web3代表着一个更加去中心化、安全和用户友好的网络环境。与传统的网络安全模型相比,Web3在多个方面展现出了其独特的优势和特点。本文将深入探讨Web3与传统网络安全模型之间的关键差异。 …

FLAN:微调语言模型是 Zero-Shot 学习者

摘要 本文探讨了一种简单的方法来提升语言模型的零样本学习能力。我们展示了指令微调——即在通过指令描述的数据集集合上对语言模型进行微调——能够显著提升模型在未见任务上的零样本表现。 我们以一个拥有1370亿参数的预训练语言模型为基础,在60多个通过自然语…

springboot中的事件发布和监听

事件定义 创建一个自定义事件类 UserLoginEvent,继承 ApplicationEvent,用于携带用户登录信息: import org.springframework.context.ApplicationEvent;public class UserLoginEvent extends ApplicationEvent { //关键点1:ext…

“开源双轨架构+40亿参数扩散Transformer——ComfyUI-OmniGen2本地部署教程:重塑多模态生成的效率边界!

一、简介 OmniGen2 是由北京智源研究院最新推出的一个强大、高效的开源多模态生成模型。与 OmniGen v1 不同,OmniGen2 具有两种不同的文本和图像模态解码路径,利用非共享参数和解耦的图像分词器。OmniGen2 在四个主要功能方面具有竞争力的性能&#xff…

Java的SpringAI+Deepseek大模型实战之会话记忆

文章目录 背景项目环境实现步骤第一步、定义会话存储方式方式一、定义记忆存储ChatMemory方式二、注入记忆存储ChatMemory 第二步、配置会话记忆方式一、老版本实现方式二、新版本实现 第三步、存储会话信息 异常处理1、InMemoryChatMemory 无法解析 背景 前两期【环境搭建】和…

RDS MySQL vs. Aurora MySQL:高需求工作负载的终极迁移指南

在 AWS 上,开发团队最常见且关键的决策之一就是选择合适的关系型数据库。通常,讨论会从 RDS for MySQL 这个可靠且熟悉的“老黄牛”开始。但很快,就会有人提到一个更强大、更云原生的选项:Aurora MySQL。 也许,就像最…

使用仓颉编程语言是一种怎样的体验?

2024年6月21日下午,华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用,全新出发!》中向全球开发者介绍了华为自研仓颉编程语言,并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开仓颉编程语言。 …

Qt Creator自定义控件开发流程

Qt Creator自定义控件开发流程 在 Qt 5.9 Creator 中开发自定义控件的完整流程如下,分为设计、实现、集成和测试四个阶段: 1. 创建自定义控件类 (1) 新建类文件 右键项目 → 添加新文件 → C Class基类选择 QWidget 或现有控件(如 QPushBu…

翻译《The Old New Thing》- 如何创建一个与屏幕大小相同的窗口,而不会被当作全屏窗口处理?

How can I create a window the size of the screen without it being treated as a fullscreen window? - The Old New Thinghttps://devblogs.microsoft.com/oldnewthing/20250522-00/?p111211 问题描述 任务栏允许全屏窗口覆盖它。这样,当你在放映幻灯片或进行…

深分页末日救星:MySQL延迟关联原理与实战手册

MySQL 深分页(如 LIMIT 100000, 10)本质是 高代价的偏移量扫描,可通过以下方案优化,附核心原理和实操示例: 一、深分页为什么慢? SELECT * FROM orders ORDER BY id DESC LIMIT 100000, 10; 执行过程&…

前端技术栈 —— HTML、CSS和JavaScirpt执行环境

以下内容由GLM回答生成,不保证正确性。 前端技术栈 —— HTML、CSS和JavaScirpt执行环境 JavaScript 的执行环境HTML 和 CSS 的执行环境HTML 和 CSS 是否可以在其他环境中执行?总结 JavaScript 是一种 解释型语言,但它也可以被编译。JavaScr…

多项式带余除法——线性代数题目为例

一、多项式带余除法的定义 二、例题 使用方法将在例题中展示:

学习日记-spring-day40-7.3

知识点: 1.自动装配Resource(3) 知识点 核心内容 重点 Autowired与Resource注入规则 默认注入逻辑:未指定参数时,Resource优先按属性名匹配(by name),失败后按类型匹配&#xf…

重新认识JNIEnv

引言 抛开一堆概念,我们从本质出发。 java 调用c 我们开发移动端或者后端服务 ,都是用的java 或者kotlin 语言。有时候我们需要用c的一些库(ocr识别/导航的算法/ 等) 因为一些跟硬件相关的接口或者系统的api 都是c写的。 C调用J…

人工智能训练师——智能语音识别ASR

人机对话——ASR 概念 ASR(Automatic Speech Recognition,自动语音识别)是一种将人类语音转换为文本的技术。它使得计算机能够“听”懂人类的语音指令或对话,并将其转换成可读、可编辑的文本形式。ASR技术是人机交互领域中的一个…

Compose 常用命令详解——AI教你学Docker

3.3 Compose 常用命令详解 Docker Compose 通过一系列命令高效管理多容器应用。理解这些命令,可以让你灵活地启动、停止、查看、调试、扩缩容和配置 Compose 项目。 一、核心命令详解 1. docker compose up 功能:启动并构建所有服务,生成网…