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

Selenium之Actions事件

鼠标、键盘组合键

在使用selenium的时候,有的时候我们需要鼠标单击、双击、拖动;或者是按下键盘的某个键,松开某个按键,以及组合键的使用;今天我们就来看一看,怎么样实现上面的操作

先把准备工作做好,需要导入ActionChains, Keys这两个模块

perform()作用就是,执行前面动作链的所有操作

from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Byserve_path = r'D:\Code_Study\driver\chromedriver-win64\chromedriver.exe'
service = Service(serve_path)
browser = webdriver.Chrome(service=service)
url = r"https://selenium.dev/selenium/web/single_text_input.html"
browser.get(url=url)

键盘Keyboard

按下按键key_down
# 可以看到输入框中输入的是大写单词
ActionChains(driver=browser).key_down(Keys.SHIFT).send_keys("selenium").perform()
释放按键key_up
松开按键key_up,可以看到先输入大写的HELLO,之后输入小写的world
ActionChains(driver=browser).key_down(Keys.SHIFT).send_keys("hello").key_up(Keys.SHIFT).send_keys("world").perform()
键入
  • 活跃元素send_keys

    # 可以看到打开网页的一瞬间, 就输入了内容;当然,还是先定位到元素,在对元素进行send_keys()的方法好用
    ActionChains(driver=browser).send_keys("selenium").perform()
    
  • 指定元素send_keys_to_element

    # 首先是定位到元素,在对元素进行内容输入
    text_input = browser.find_element(By.ID, "textInput")
    ActionChains(driver=browser).send_keys_to_element(text_input,"selenium").perform()
复制粘贴
# send_keys(Keys.ARROW_LEFT) - 按一次左箭头键,将光标移动到"Selenium"的最后一个字母'm'的后面
# key_down(Keys.SHIFT) - 按下Shift键(不松开)
# send_keys(Keys.ARROW_UP) - 在按住Shift的同时按上箭头键(通常用于向上选择文本)
# key_up(Keys.SHIFT) - 松开Shift键
# key_down(cmd_ctrl) - 按下Command键(Mac)或Control键(Windows)
# send_keys("xvv") - 在按住Command/Control键的同时输入:
# 'x' - 通常是剪切操作(Command+X/Ctrl+X)
# 'v' - 粘贴操作(Command+V/Ctrl+V)
# 第二个'v' - 再次粘贴
# key_up(cmd_ctrl) - 松开Command/Control键
cmd_ctrl = Keys.COMMAND if sys.platform == "darwin" else Keys.CONTROL
ActionChains(driver=browser).send_keys("Selenium")\.send_keys(Keys.ARROW_LEFT).key_down(Keys.SHIFT)\.send_keys(Keys.ARROW_UP).key_up(Keys.SHIFT)\.key_down(cmd_ctrl).send_keys("xvv").key_up(cmd_ctrl).perform()

鼠标Mouse

url = r"https://selenium.dev/selenium/web/single_text_input.html"
browser.get(url=url)
点击鼠标左键click
# 可以看到点击了一个链接,进入了一个新页面
clickable =browser.find_element(By.ID,"click")
ActionChains(driver=browser).click(clickable).perform()
按住鼠标左键click_and_hold
# 可以看到点击一下,右侧展示【focused】;
clickable = browser.find_element(By.ID,"clickable")
ActionChains(driver=browser).click_and_hold(clickable).perform()
双击左键double_click
# 点击二下右侧展示【double-clicked】
clickable = browser.find_element(By.ID,"clickable")
ActionChains(driver=browser).double_click(clickable).perform()
assert browser.find_element(By.ID, "click-status").text == "double-clicked"
点击鼠标右键context_click
# 可以看到点击右键的一些信息和平时手动右键出现的内容一模一样
clickable = browser.find_element(By.ID, "clickable")
ActionChains(driver=browser) \.context_click(clickable) \.perform()

鼠标对应按键数字

"""
使用 数字 代替 MouseButton.FORWARD:
0 = 左键(MouseButton.LEFT)
1 = 中键(MouseButton.MIDDLE)
2 = 右键(MouseButton.RIGHT)
3 = 前进侧键(MouseButton.FORWARD)
4 = 后退侧键(MouseButton.BACK)
"""
点击鼠标前进键MouseButton.FORWARD
# 可以看到鼠标点击链接跳转后,再后退以下;然后会前进一步
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.devtools.v132.input_ import MouseButton# 点击click后,链接的title为We Arrive Here
browser.find_element(By.ID,"click").click()
time.sleep(3)
browser.back()
print(browser.title)
assert browser.title == "BasicMouseInterfaceTest"# ActionBuilder 是 Selenium 提供的一个底层动作构造器,用于构建复杂的输入设备(如鼠标、键盘、触摸屏等)操作。
这里初始化了一个 ActionBuilder 对象,绑定到当前的浏览器实例 browser。
# pointer_action表示鼠标指针操作
# pointer_down、pointer_up表示按下、释放;往往成对出现
# action = ActionBuilder(driver=browser)
# 这里我的鼠标对应的4,才是前进键;其他的可以各位私下尝试
# 因为使用方法会报错,这里用了数字可以使用
action.pointer_action.pointer_down(4)
action.pointer_action.pointer_up(4)
action.perform()
print(browser.title)
assert browser.title == "We Arrive Here"
点击鼠标回退键MouseButton.BACK
browser.find_element(By.ID, "click").click()
assert browser.title == "We Arrive Here"
print(browser.title)# ActionBuilder 是 Selenium 提供的一个底层动作构造器,用于构建复杂的输入设备(如鼠标、键盘、触摸屏等)操作。
这里初始化了一个 ActionBuilder 对象,绑定到当前的浏览器实例 browser。
# pointer_action表示鼠标指针操作
# pointer_down、pointer_up表示按下、释放;往往成对出现action = ActionBuilder(browser)# 这里我的鼠标对应的3,才是前进键;其他的可以各位私下尝试
# 因为使用方法会报错,这里用了数字可以使用
action.pointer_action.pointer_down(3)
action.pointer_action.pointer_up(3)
action.perform()
print(browser.title)
assert browser.title == "BasicMouseInterfaceTest"
移动光标到元素上move_to_element
# 可以看到鼠标移动过去,右侧展示文字
hoverable = browser.find_element(By.ID, "hover")
ActionChains(driver=browser).move_to_element(hoverable).perform()
通过偏移量移动光标
  • 先移动到指定的坐标原点

  • 通过px单位的偏移量进行光标相对原点的偏移移动

  • 光标位置必须在可视化窗口区域,否则报错

从元素中心点【原点】偏移move_to_element_with_offset

先将光标移动到元素中心点(原点),然后通过偏移量进行光标相对原点的偏移。

move_to_element_with_offset接受三个参数,可以查看源码
move_to_element_with_offset(self, to_element: WebElement, xoffset: int, yoffset: int) -> ActionChains:"""Move the mouse by an offset of the specified element. Offsets arerelative to the in-view center point of the element.:Args:- to_element: The WebElement to move to.- xoffset: X offset to move to, as a positive or negative integer.- yoffset: Y offset to move to, as a positive or negative integer."""self.w3c_actions.pointer_action.move_to(to_element, int(xoffset), int(yoffset))self.w3c_actions.key_action.pause()return self
# 先定位到元素
mouse_tracker = browser.find_element(By.ID, "mouse-tracker")
# 先移动到元素,默认就是中心点
ActionChains(driver=browser).move_to_element(mouse_tracker).click().perform()
time.sleep(5)
# x轴增加了8个px,y轴不动
ActionChains(driver=browser).move_to_element_with_offset(mouse_tracker, 8, 0).perform()
# 获取Relative Location in Box:内容
coordinates = browser.find_element(By.ID, "relative-location").text.split(",")
assert abs(int(coordinates[0]) - 100 - 8) < 2
从左上角偏移move_to_location

先将光标移动到窗口左上角原点,然后通过偏移量进行偏移

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECWebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(browser)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = browser.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
从当前光标位置偏移move_by_offset

光标位于当前位置的,通过偏移量进行偏移;如果之前没有移动过光标,则位置是窗口左上角;

页面发生滚动后,光标位置不会发生变化

查看源码,发现第一个参数指定为正数往右移动;第二个参数指定正数往下移动

 move_by_offset(self, xoffset: int, yoffset: int) -> ActionChains:"""Moving the mouse to an offset from current mouse position.:Args:- xoffset: X offset to move to, as a positive or negative integer.- yoffset: Y offset to move to, as a positive or negative integer."""self.w3c_actions.pointer_action.move_by(xoffset, yoffset)self.w3c_actions.key_action.pause()
action = ActionBuilder(browser)
# 先右移动6px;下移动3px
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(browser).move_by_offset(13,15).perform()
拖放元素drag_and_drop

在原元素上提交执行按下鼠标左键,移动到目标元素位置后是释放鼠标左键。

查看源码,第一个是需要移动的元素,第二个是要移动到哪里的元素,释放鼠标

    def drag_and_drop(self, source: WebElement, target: WebElement) -> ActionChains:"""Holds down the left mouse button on the source element, then movesto the target element and releases the mouse button.:Args:- source: The element to mouse down.- target: The element to mouse up."""self.click_and_hold(source)self.release(target)return self
draggable = browser.find_element(By.ID, "draggable")
droppable = browser.find_element(By.ID, "droppable")
ActionChains(browser).drag_and_drop(draggable, droppable).perform()
time.sleep(5)
assert browser.find_element(By.ID, "drop-status").text == "dropped"
通过偏移量拖放元素drag_and_drop_by_offset

查看源码,发现需要一个开始元素的element;和需要移动x、y的偏移量

    def drag_and_drop_by_offset(self, source: WebElement, xoffset: int, yoffset: int) -> ActionChains:"""Holds down the left mouse button on the source element, then movesto the target offset and releases the mouse button.:Args:- source: The element to mouse down.- xoffset: X offset to move to.- yoffset: Y offset to move to."""self.click_and_hold(source)self.move_by_offset(xoffset, yoffset)self.release()return self

首先计算需要拖动的元素的location,之后计算出要释放鼠标的元素的location;之后后者的x轴,y轴分别减去前者的x、y坐标;就是需要移动的x、y坐标的偏移量

draggable = browser.find_element(By.ID, "draggable")
start = draggable.location
finish = browser.find_element(By.ID, "droppable").location
ActionChains(browser)\.drag_and_drop_by_offset(draggable,finish["x"] - start["x"],finish["y"] - start["y"]).perform()assert browser.find_element(By.ID, "drop-status").text == "dropped"

相关文章:

Selenium之Actions事件

鼠标、键盘组合键 在使用selenium的时候&#xff0c;有的时候我们需要鼠标单击、双击、拖动&#xff1b;或者是按下键盘的某个键&#xff0c;松开某个按键&#xff0c;以及组合键的使用&#xff1b;今天我们就来看一看&#xff0c;怎么样实现上面的操作 先把准备工作做好&…...

高等数学同步测试卷 同济7版 试卷部分 上 做题记录 第三章微分中值定理与导数的应用同步测试卷 A 卷

第三章微分中值定理与导数的应用同步测试卷 A 卷 一、单项选择题(本大题共5小题,每小题3分,总计15分) 1. 2. 3. 4. 5. 二、填空题(本大题共5小题,每小题3分,总计15分) 6. 7. 8. 9. 10. 三、求解下列各题(本大题共5小题,每小题6分,总计…...

使用Vscode排除一些子文件搜索

打开用户/工作区设置 全局生效&#xff1a;打开命令面板&#xff08;CtrlShiftP 或 CmdShiftP&#xff09;&#xff0c;搜索并选择 Preferences: Open User Settings (JSON)。 仅当前项目生效&#xff1a;在项目根目录下创建 .vscode/settings.json 文件&#xff08;如果不存在…...

《前端面试题之 CSS篇(第一集)》

目录 1、CSS的盒模型2、CSS选择器及其优先级3、隐藏元素的方法有那些4、px、em、rem的区别及使用场景5、重排、重绘有什么区别6、水平垂直居中的实现7、CSS中可继承与不可继承属性有哪些8、Sass、Less 是什么&#xff1f;为什么要使用他们&#xff1f;9、CSS预处理器/后处理器是…...

第九天 开始Unity Shader的学习之单张纹理

Unity Shader的学习笔记 第九天 开始Unity Shader的学习之单张纹理 文章目录 Unity Shader的学习笔记前言一、基础纹理二、单张纹理① Properties② Cg代码块的变量③ 顶点着色器和片元着色器的结构体(a2v 和 v2f)④ 顶点着色器vert⑤ 片元着色器 frag效果展示 总结 前言 前几…...

Linux-内核驱动-led

登记设备号&#xff08;后面可以动态分配&#xff09; 自己定义内核函数 登记设备名字和功能 exit和init在内核启动自动执行 这样定义直接操作物理地址 ioctl 定义了设备文件的各种操作&#xff0c;并准备将其注册到内核中。 代码中声明了一个cdev结构体变量cdev&#xff0c;这…...

Web 项目实战:构建属于自己的博客系统

目录 项目效果演示 代码 Gitee 地址 1. 准备工作 1.1 建表 1.2 引入 MyBatis-plus 依赖 1.3 配置数据库连接 1.4 项目架构 2. 实体类准备 - pojo 包 2.1 dataobject 包 2.2 request 包 2.3 response 包 2.3.1 统一响应结果类 - Result 2.3.2 用户登录响应类 2.3.3…...

C++算法(1):stringstream详解,高效字符串处理与类型转换的利器

什么是stringstream&#xff1f; stringstream是C标准库中的一个类&#xff0c;定义在<sstream>头文件中。它提供了一种方便的方式来处理字符串与其他数据类型之间的转换和格式化操作。stringstream结合了istringstream和ostringstream的功能&#xff0c;既可以用于输入…...

【前端】【css】flex布局详解

Flex 布局&#xff08;Flexible Box Layout&#xff0c;弹性盒子布局&#xff09;是 CSS3 中的一种布局模式&#xff0c;用于在容器中更高效地分配空间并对齐内容&#xff0c;即使它们的大小是动态未知的。它非常适用于响应式设计。 一、Flex 布局的基本概念 1. 启用 Flex 布局…...

Python Cookbook-5.15 根据姓的首字母将人名排序和分组

任务 想将一组人名写入一个地址簿&#xff0c;同时还希望地址簿能够根据姓的首字母进行分组&#xff0c;且按照字母顺序表排序。 解决方案 Python 2.4 的新 itertools.groupby 函数使得这个任务很简单: import itertools def qroupnames(name_iterable):sorted_names sort…...

深入探析C#设计模式:访问者模式(Visitor Pattern)的原理与应用

引言 在软件开发中&#xff0c;设计模式为我们提供了高效、可维护的解决方案。而在众多设计模式中&#xff0c;访问者模式&#xff08;Visitor Pattern&#xff09;以其独特的结构和应用场景&#xff0c;在复杂系统中发挥着重要作用。本文将深入讲解访问者模式的定义、原理、优…...

2025蓝桥杯省赛C/C++研究生组游记

前言 至少半年没写算法题了&#xff0c;手生了不少&#xff0c;由于python写太多导致行末老是忘记打分号&#xff0c;printf老是忘记写f&#xff0c;for和if的括号也老是忘写&#xff0c;差点连&&和||都忘记了。 题目都是回忆版本&#xff0c;可能有不准确的地方。 …...

RPA VS AI Agent

图片来源网络 RPA&#xff08;机器人流程自动化&#xff09;和AI Agent&#xff08;人工智能代理&#xff09;在自动化和智能化领域各自扮演着重要角色&#xff0c;但它们之间存在显著的区别。以下是对两者区别的详细分析&#xff1a; 一、定义与核心功能 RPA&#xff08;机…...

软件信息化项目等级分类评定表

对信息化项目进行分类评级管理,能够优化资源配置、保障项目成效。可从项目性质、规模、战略价值等维度分类,依据技术、风险、收益等指标评级,进而实现精细化管理。 分类管理 按项目性质分类:可分为业务流程优化项目,如优化企业采购流程的信息化项目,旨在提升效率;还有信…...

从0~1搭建自动化备份全网服务器数据平台

目录 摘要: 一、项目背景 1.1 rsync简介 作用&#xff1a; 特点&#xff1a; 语法&#xff1a; 1.2 项目需求 配置需求&#xff1a; 二、项目环境 2.1 项目拓扑结构 2.2 软硬件环境清单 三、任务清单 3.1 项目环境搭建 3.2 服务器部署 Web服务器搭建部署&#…...

用户态视角理解内核ROP利用:快速从shell到root的进阶

用户态视角理解内核ROP利用:快速从shell到root的进阶 一、摘要 本文仅限于快速从用户态向内核态入门,可能会有很多不严谨的地方,存在问题请及时告知感谢!本文旨在通过对比用户态 ROP 利用和内核 ROP 利用,揭示两者在利用手法上的相似性。通过分析用户态漏洞利用的流程,结合…...

我又叕叕叕更新了~纯手工编写C++画图,有注释~

本次更新内容: 优化性能,朗读 提前申明:如果运行不了,请到主页查看RedpandaDevc++下载,若还是不行就卸了重装。 版本号:1.26.36 779行 24690字 最终结果预览 代码预览 //版本号 :v1.26.36 //最终归属权为作者(饼干帅成渣)所有 //禁止转载 //仅供学习,不得用于违法 #…...

【家政平台开发(37)】家政平台蜕变记:性能优化与代码重构揭秘

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…...

基于springboot+vue的秦皇岛旅游景点管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系统展示 用户登录 旅游路…...

图像预处理-翻转与仿射变换

一.图像翻转 cv2.flip(img,flipcode) 参数 - flipcode : 指定翻转类型的标志&#xff0c;为0&#xff0c;表示沿x轴翻转&#xff0c;>0(默认1) 表示沿y轴翻转&#xff0c;为 <0(默认-1) 表示水平垂直翻转 OpenCV中&#xff0c;图片的镜像旋转以图像的中心为原点 impo…...

[ABC400F] Happy Birthday! 3 题解

考虑正难则反。问题转化为&#xff1a; 一个环上有 n n n 个物品&#xff0c;颜色分别为 c o l i col_i coli​&#xff0c;每次操作选择两个数 i , j i, j i,j 使得 ∀ k ∈ [ i , j ] , c o l k c o l i ∨ c o l k 0 \forall k \in [i, j], col_k col_i \lor col_k …...

使用nuxt3+tailwindcss4+@nuxt/content3在页面渲染 markdown 文档

nuxt3tailwindcss在页面渲染 markdown 文档 页面效果 依赖 “nuxt/content”: “^3.4.0” “tailwindcss”: “^4.0.10” “nuxt”: “^3.16.2” “tailwindcss/vite”: “^4.0.10” tailwindcss/typography (这个是格式化 md 样式用的) 注意&#xff1a; 这里nuxt/content…...

畅游Diffusion数字人(23):字节最新表情+动作模仿视频生成DreamActor-M1

畅游Diffusion数字人(0):专栏文章导航 前言:之前有很多动作模仿或者表情模仿的工作,但是如果要在实际使用中进行电影级的复刻工作,仅仅表情或动作模仿还不够,需要表情和动作一起模仿。最近字节跳动提出了一个表情+动作模仿视频生成DreamActor-M1。 目录 贡献概述 核心动…...

多模态学习分析(MLA)驱动高中差异化教学策略研究

一、引言 1.1 研究背景 在当今时代&#xff0c;教育数字化转型的浪潮正席卷全球&#xff0c;深刻地改变着教育的面貌。这一转型不仅是技术的革新&#xff0c;更是教育理念、教学模式和教育管理的全面变革。随着互联网、大数据、人工智能等现代信息技术在教育领域的广泛应用&a…...

为什么ASCII的A是65[特殊字符]

为什么ASCII的A是65 1. ASCII是怎么来的 ASCII是1960年代美国标准协会制定的&#xff0c;目的是统一计算机字符编码。它们要在**7个比特位&#xff08;0-127&#xff09;**里&#xff0c;塞下所有英文字符&#xff0c;数字&#xff0c;标点和控制符。 2. 为什么A是65&#x…...

Python正则表达式实战技巧:如何高效处理文本匹配?

当你需要在Python中处理文本数据时&#xff0c;正则表达式绝对是你的瑞士军刀。无论是数据清洗、日志分析还是表单验证&#xff0c;掌握正则表达式都能让你事半功倍。今天我们就来聊聊Python中re模块的那些实用技巧和常见陷阱。 为什么正则表达式如此重要&#xff1f; 想象一…...

驱动学习专栏--写在前面

此专栏基于正点原子的文档【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 开发板为luckfox的rv1106开发板&#xff0c;之前参加过一个CM1相机的开源项目&#xff0c;与其吃灰不如作为一个学习的工具来发挥余热 所以文档中的一些东西需要对应的在rv1106平台上做修改&#xff…...

Java中的Map vs Python字典:核心对比与使用指南

一、核心概念 1. 基本定义 Python字典&#xff08;dict&#xff09; &#xff1a;动态类型键值对集合&#xff0c;语法简洁&#xff0c;支持快速查找。Java Map&#xff1a;接口&#xff0c;常用实现类如 HashMap、LinkedHashMap&#xff0c;需声明键值类型&#xff08;泛型&…...

从零搭建微服务项目Pro(第0章——微服务项目脚手架搭建)

前言&#xff1a; 在本专栏Base第0章曾介绍一种入门级的微服务项目搭建&#xff0c;尽管后续基于此框架上实现了Nacos、Eureka服务注册发现、配置管理、Feign调用、网关模块、OSS文件存储、JSR参数校验、LogBack日志配置&#xff0c;鉴权模块、定时任务模块等&#xff0c;但由于…...

RAG创建向量数据库:docsearch = FAISS.from_texts(documents, embeddings)

RAG创建向量数据库:docsearch = FAISS.from_texts(documents, embeddings) 代码解释 docsearch = FAISS.from_texts(documents, embeddings) 这行代码主要作用是基于给定的文本集合创建一个向量数据库(这里使用 FAISS 作为向量数据库工具 )。具体说明如下: FAISS :FAISS …...

71.case语句要比if-else 语句费逻辑单元

...

适配python3.9的 SORT算法

简单地更改了 sort.py 函数的接口&#xff0c;核心思想、处理操作并不改变。 源代码链接&#xff1a;https://github.com/abewley/sort import os import numpy as np import glob import time import argparse from filterpy.kalman import KalmanFilter from scipy.optimiz…...

记录Docker部署CosyVoice V2.0

#记录工作 CosyVoice 是由 FunAudioLLM 团队开发的一个开源多语言大规模语音生成模型&#xff0c;提供了从推理、训练到部署的全栈解决方案。 项目地址&#xff1a; https://github.com/FunAudioLLM/CosyVoice.git 该项目目前从v1.0版本迭代到v2.0版本&#xff0c;但是在Wind…...

源码编译 Galera、MySQL 5.7 Wsrep 和安装 MySQL 5.7 Galera集群

源码编译 Galera、MySQL 5.7 Wsrep 和安装 MySQL 5.7 Galera集群 说明1、源码编译 Galera1.1、安装依赖1.2、源码编译安装 openSSL1.2.1、下载源码1.2.2、编译安装 1.3、源码编译安装 Galera 31.3.1、下载源码1.3.2、注意1.3.3、编译安装 2、源码编译 MySQL-Wsrep2.1、安装依赖…...

【SLAM】ubuntu 18.04 下 OpenCV 3.2.0 的 opencv_example 运行闪退

本文首发于❄慕雪的寒舍 ubuntu 18.04 下 OpenCV 3.2.0 的 opencv_example 运行闪退问题探究。 1. 问题说明 在之前的ORB-SLAM3项目于ROS运行的博客中&#xff0c;提到过安装ROS时会自己安装一个OpenCV 3.2.0版本&#xff0c;所以最好不要安装其他版本的OpenCV&#xff0c;避…...

Linux网络编程——数据链路层详解,以太网、MAC地址、MTU、ARP、DNS、NAT、代理服务器......

目录 一、前言 二、以太网 二、以太网帧格式 三、 MAC地址 四、MTU 1、数据链路层的数据分片 2、MTU对UDP协议的影响 3、MTU对TCP协议的影响 五、ARP协议 1、什么是ARP 2、ARP的作用 3、ARP协议的工作流程 4、ARP缓存表 5、ARP请求报文 6、中间人 六、DNS&…...

Android7 Input(四)InputReader

概述 本文主要描述了Android Input框架中的InputReader的功能&#xff0c;InputReader模块的功能&#xff0c;总结成一句话就是InputReader获取输入设备的事件并将事件进行加工处理&#xff0c;然后传递给QueuedInputListener&#xff0c;最终QueuedInputListener将事件传递给…...

游戏报错?MFC140.dll怎么安装才能解决问题?提供多种MFC140.dll丢失修复方案

MFC140.dll 是 Microsoft Visual C 2015 运行库的重要组成部分&#xff0c;许多软件和游戏依赖它才能正常运行。如果你的电脑提示 "MFC140.dll 丢失" 或 "MFC140.dll 未找到"&#xff0c;说明系统缺少该文件&#xff0c;导致程序无法启动。本文将详细介绍 …...

寻找最大美丽数

# 输入&#xff1a;nums1 [4,2,1,5,3], nums2 [10,20,30,40,50], k 2 # 输出&#xff1a;[80,30,0,80,50] import random class Solution:def findMaxSum(self, nums1, nums2, k):hash_table []sum1 0data []print(**31,\n,\t数据)for key,values in enumerate(nums1):da…...

[Linux]进程地址空间

前言 我们在学习C语言期间&#xff0c;经常可以提及到这些区域&#xff0c;有一个问题&#xff1a;这里的地址空间是内存吗&#xff1f;答案是这里的地址空间并不是内存。这里的地址空间是进程地址空间&#xff0c;下面我们就讲解进程地址空间。 这段空间中自下而上&#xff…...

dfs和bfs算法

DFS&#xff08;深度优先搜索&#xff0c;Depth-First Search&#xff09;和 BFS&#xff08;广度优先搜索&#xff0c;Breadth-First Search&#xff09;是图遍历或搜索算法中的两种基本方法。它们在探索图的节点时采用不同的策略&#xff0c;适用于不同的场景。 ### 深度优先…...

跨站请求是什么?

介绍 跨站请求&#xff08;Cross-Site Request&#xff09;通常是指浏览器在访问一个网站时&#xff0c;向另一个域名的网站发送请求的行为。这个概念在 Web 安全中非常重要&#xff0c;尤其是在涉及到“跨站请求伪造&#xff08;CSRF&#xff09;”和“跨域资源共享&#xff…...

【深度学习与大模型基础】第9章-条件概率以及条件概率的链式法则

简单理解条件概率 条件概率就是在已知某件事发生的情况下&#xff0c;另一件事发生的概率。用数学符号表示就是&#xff1a; P(A|B) 在B发生的前提下&#xff0c;A发生的概率。 计算机例子&#xff1a;垃圾邮件过滤 假设你写了一个程序来自动判断邮件是否是垃圾邮件&#xf…...

C++: 获取auto的实际类型

auto a "hello";auto* b "hello";auto& c "hello";上述 a, b, c 类型分别是什么&#xff1f; 在不使用 IDE 提供的 inlay hints 情况下&#xff0c; 可以编译期获取&#xff0c;然后运行时打印出来: 方法&#xff1a; 用 decltype(var)…...

谷歌开源代理开发工具包(Agent Development Kit,ADK):让多智能体应用的构建变得更简

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

揭开人工智能与机器学习的神秘面纱:开发者的视角

李升伟 编译 人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;早已不再是空洞的流行语——它们正在彻底改变我们构建软件、做出决策以及与技术互动的方式。无论是自动化重复性任务&#xff0c;还是驱动自动驾驶汽车&#xff0c;AI/ML都是现代创新的核…...

35.Java线程池(线程池概述、线程池的架构、线程池的种类与创建、线程池的底层原理、线程池的工作流程、线程池的拒绝策略、自定义线程池)

一、线程池概述 1、线程池的优势 线程池是一种线程使用模式&#xff0c;线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能&#xff0c;而线程池维护着多个线程&#xff0c;等待着监督管理者分配可并发执行的任务&#xff0c;这避免了在处理短时间任务时创建与…...

【NumPy科学计算:高性能数组操作核心指南】

目录 前言&#xff1a;技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现运行结果验证 三、性能对比测试方法论量化数据对比结果分析 四、最佳实践推荐方案 ✅常见错误 ❌调试技…...

软考 系统架构设计师系列知识点之杂项集萃(50)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;49&#xff09; 第78题 著作权中&#xff0c;&#xff08;&#xff09;的保护期不受限制。 A. 发表权 B. 发行权 C. 署名权 D. 展览权 正确答案&#xff1a;C。 所属知识点&#xff1a;旧版…...

实现定长的内存池

池化技术 所谓的池化技术&#xff0c;就是程序预先向系统申请过量的资源&#xff0c;然后自己管理起来&#xff0c;以备不时之需。这个操作的价值就是&#xff0c;如果申请与释放资源的开销较大&#xff0c;提前申请资源并在使用后并不释放而是重复利用&#xff0c;能够提高程序…...