【测试】——Selenium API (万字详解)

news2024/11/15 16:02:41

📖 前言:本文详细介绍了如何利用Selenium进行Web自动化测试,包括定位元素(如cssSelector和xpath)、常用操作函数(如点击、输入等)、窗口管理、键盘鼠标事件和浏览器导航,以及处理弹窗和文件上传。

在这里插入图片描述


目录

  • 🕒 1. 元素的定位
    • 🕘 1.1 CSS selector
      • 🕤 1.1.1 id 选择器
      • 🕤 1.1.2 类选择器
      • 🕤 1.1.3 标签选择器
      • 🕤 1.1.4 后代选择器
    • 🕘 1.2 XPath
      • 🕤 1.2.1 绝对路径
      • 🕤 1.2.2 相对路径 + 索引
      • 🕤 1.2.3 相对路径 + 属性值
      • 🕤 1.2.4 相对路径 + 通配符
      • 🕤 1.2.5 相对路径 + 文本定位
    • 🕘 1.3 定位一组元素
    • 🕘 1.4 应用:打开百度页面输入软件测试,点击百度一下
  • 🕒 2. 操作测试对象
    • 🕘 2.1 鼠标点击(click)与键盘输入(sendkeys)
    • 🕘 2.2 submit 提交表单
    • 🕘 2.3 getAttribute 获取元素文本
    • 🕘 2.4 clear 清除输入
  • 🕒 3. 添加等待
    • 🕘 3.1 sleep 休眠
    • 🕘 3.2 隐式等待
    • 🕘 3.3 显式等待
  • 🕒 4. 打印URL与title
  • 🕒 5. 浏览器的操作
    • 🕘 5.1 浏览器最大化
    • 🕘 5.2 浏览器设置大小
    • 🕘 5.3 浏览器的前进、后退、刷新
    • 🕘 5.4 浏览器滚动条
    • 🕘 5.5 浏览器关闭
  • 🕒 6. 键盘事件(组合键)
  • 🕒 7. 鼠标事件
  • 🕒 8. 多层框架/窗口定位
  • 🕒 9. 下拉框处理
  • 🕒 10. alert 弹窗
  • 🕒 11. 文件上传
  • 🕒 12. 窗口
  • 🕒 13. 截图

🕒 1. 元素的定位

对象的定位是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。

webdriver 提供了一系列的对象定位方法,常用的有以下几种:

  • id
  • name
  • class name
  • link text
  • partial link text
  • tag name
  • xpath
  • css selector

我们主要来学习通过 CSS selector 和 XPath 进行定位。

🕘 1.1 CSS selector

CSS(Cascading Style Sheets)是一种用于描述HTML和XML文档外观的语言。CSS通过选择器将属性应用于页面元素。这些选择器也可以被Selenium作为定位策略使用。CSS非常灵活,能够选择控件的任何属性,可以通过Chrome浏览器的F12开发者工具中的“Element”选项,右键点击并选择“copy → copy selector”来获取CSS选择器。

在这里插入图片描述

🕤 1.1.1 id 选择器

语法:#+[id]

以定位百度搜索框为例,Ctrl+F搜索#kw,之后可以通过上下键定位到元素:

在这里插入图片描述

🕤 1.1.2 类选择器

语法:.+[class]

在这里插入图片描述

🕤 1.1.3 标签选择器

语法:[标签名]

在这里插入图片描述

由于span标签极为众多,无法精确定位到特定元素,因此需要使用我们接下来要讨论的后代选择器。

🕤 1.1.4 后代选择器

语法:[父标签] + 空格 + [子标签[ ( + :nth-child(n) )

注: :nth-child(n) 是用来具体的定位子标签中的第 n 个。

父标签 + 空格 + 子标签:
在这里插入图片描述

父标签 + 空格 + 子标签 + 空格+ id 选择器:

在这里插入图片描述

🕘 1.2 XPath

XPath 是一种用于在 XML 文档中定位元素的语言。由于 HTML 可以被视为 XML 的一种形式,因此 Selenium 用户可以利用这种强大的语言来定位 Web 应用中的元素。

XPath 提供了比 id 和 name 更多的定位方式,增加了选择的可能性。可以通过 Chrome 浏览器的 F12 开发者工具中的元素选项,使用右键菜单中的复制 XPath 功能来获取 XPath。

xpath使用路径表达式来选择xml⽂档中的节点

语法作用备注
//*获取HTML页面所有节点
//[ ]获取HTMl页面指定的节点//ul:获取HTMl页面所有的ul节点
/获取一个节点的直接节点//span/input
. .获取一个节点的父亲节点//input/. . 获取input节点的父亲节点
[@…]实现节点属性的匹配//*[@id=‘kw’] 匹配HTML页面中id属性位kw的节点
//div/ul/li[3]定位到第三个百度热搜标签

🔎 XPath 教程

🕤 1.2.1 绝对路径

在这里插入图片描述

/html/head/title

这样效率是比较低的,因此我们不常用

🕤 1.2.2 相对路径 + 索引

在这里插入图片描述

//form/span[1]/input[1]                 <!--不写下标时默认是 1 -->

🕤 1.2.3 相对路径 + 属性值

在这里插入图片描述

//input[@class="s_ipt"]

在这里插入图片描述

//input[@id="su"]

🕤 1.2.4 相对路径 + 通配符

在这里插入图片描述

//*[@*="s_ipt"]

🕤 1.2.5 相对路径 + 文本定位

在这里插入图片描述

//a[text()="新闻"]

推荐使用 CSS 选择器定位元素,因为 xpath 定位元素效率非常低(需要将整个页面加载到内存中,然后再去定位元素)。

🕘 1.3 定位一组元素

我们先运行一段 HTML 的代码:

<html>
<head>
  <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  <title>Checkbox</title>
</head>
<body>
<h3>checkbox</h3>
<div class="well">
  <form class="form-horizontal">
    <div class="control-group">
      <label class="control-label" for="c1">checkbox1</label>
      <div class="controls">
        <input type="checkbox" id="c1" />
      </div>
    </div>
    <div class="control-group">
      <label class="control-label" for="c2">checkbox2</label>
      <div class="controls">
        <input type="checkbox" id="c2" />
      </div>
    </div>
    <div class="control-group">
      <label class="control-label" for="c3">checkbox3</label>
      <div class="controls">
        <input type="checkbox" id="c3" />
      </div>
    </div>
    <div class="control-group">
      <label class="control-label" for="r">radio</label>
      <div class="controls">
        <input type="radio" id="r1" />
      </div>
    </div>
    <div class="control-group">
      <label class="control-label" for="r">radio</label>
      <div class="controls">
        <input type="radio" id="r2" />
      </div>
    </div>
  </form>
</div>
</body>
</html>

在这里插入图片描述

在这里插入图片描述

运行后,出现如上图所示界面。接下来在这个界面我们进行操作:

radio – 单选;checkbox – 复选框

接下来,我们选中页面上的所有复选框:

private static void page01() {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("http://localhost:63342/TestSelenium/src/main/Page/test01.html?_ijt=alufanopk60p99kj3p8rtjok8d&_ij_reload=RELOAD_ON_SAVE");
    // 获取到 input 标签下的所有元素
    List<WebElement> webElements = webDriver.findElements(By.cssSelector("input"));
    for (int i = 0; i < webElements.size(); i++) {
        if(webElements.get(i).getAttribute("type").equals("radio")){

        }else{
            webElements.get(i).click();
        }
    }
}

在这里插入图片描述

🕘 1.4 应用:打开百度页面输入软件测试,点击百度一下

private static void clickBaiduTest() throws InterruptedException{
	// 创建一个驱动
	WebDriver webDriver = new ChromeDriver();
	// 打开百度界面
	webDriver.get("https://www.baidu.com");
	// 通过 css selector选中搜索框 输入数据“软件测试”
	webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
	// 点击 百度一下 按钮
	// 通过 css selector
	webDriver.findElement(By.cssSelector("#su")).click();
	// 或者通过 xpath
	//webDriver.findElement(By.xpath("//*[@id=\"su\"]")).click();
	sleep(3000);
	// 选择所有 <a> 标签内的 <em> 标签。即找到页面上所有的“软件测试”文本相关的元素”,选取原因可参考下图
	List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));
	// 遍历List
	for(int i= 0; i < elements.size(); i++) {
		// 如果返回的结果有软件测试,证明测试通过,否则不通过
	    if(elements.get(i).getText().equals("软件测试")) {
	        System.out.println("测试通过");
	    } else {
	        System.out.println("测试不通过");
	    }
	}
	webDriver.quit();
}

注:如果遇到中文乱码记得改成UTF-8

在这里插入图片描述

🕒 2. 操作测试对象

定位元素是第一步,在定位元素后,需要对这个元素进行进一步的操作。

webdriver 中比较常用的操作对象的方法有下面几个:

  • click 点击对象
  • submit 提交
  • sendkeys 在对象上模拟按键输入
  • getAttribute 用于获取元素的文本信息
  • clear 清除对象输入的文本内容

🕘 2.1 鼠标点击(click)与键盘输入(sendkeys)

webDriver.findElement(By.cssSelector("#su")).click();
webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");

🕘 2.2 submit 提交表单

点击的元素必须放到 form 标签中,否则会报错。而 click 没有要求。

可以看到“百度一下”按钮位于 form 表单中:
在这里插入图片描述

webDriver.findElement(By.cssSelector("#su")).submit();

🕘 2.3 getAttribute 获取元素文本

// 找到“百度一下”文本
String button_value = webDriver.findElement(By.cssSelector("#su")).getAttribute("value");
System.out.println(button_value);

在这里插入图片描述

🕘 2.4 clear 清除输入

webDriver.findElement(By.cssSelector("#kw")).clear();

🕒 3. 添加等待

🕘 3.1 sleep 休眠

private static void sleepTest() throws InterruptedException{
	...
	sleep(3000);
}

只需要将异常抛出即可。

🕘 3.2 隐式等待

通过添加 implicWait() 方法就可以方便的实现智能等待。

implicWait() 的用法比 sleep() 更智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。

private static void implicWaitTest() {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("https://www.baidu.com");
    webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
    webDriver.findElement(By.cssSelector("#su")).click();
    webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);
    webDriver.findElement(By.cssSelector("#kw")).clear();
    webDriver.quit();
}

在代码中,我们设置了让程序等待 3 天再退出,然而在运行代码后发现,程序运行结束后就立刻退出了。

隐式地等待并非一个固定的等待时间,当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它以轮询的方式不断的判断元素是否被定位到。直到超出设置的时长。

🕘 3.3 显式等待

显式等待和隐式等待,表示最多等待输入的时间,如果找到了对应元素则直接执行后续代码,不再强制等待,即显式等待和隐式等待都是智能等待;不同点:隐式等待等待的是页面上的所有元素,显式等待等待条件满足即可。

webDriver.get("http://www.baidu.com/");
WebDriverWait webDriverWait = new WebDriverWait(webDriver, 50);
// 等待标题变为指定的文本
webDriverWait.until(ExpectedConditions.titleIs("百度一下,你就知道"));

🕒 4. 打印URL与title

private static void printTest() {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("https://www.baidu.com/");

    String url = webDriver.getCurrentUrl();
    String title = webDriver.getTitle();

    if(url.equals("https://www.baidu.com/") && title.equals("百度一下,你就知道")){
        System.out.println("当前页面URL:" + url + ",当前页面title:" + title);
        System.out.println("测试通过");
    }else{
        System.out.println("测试不通过");
    }
    webDriver.quit();
}

在这里插入图片描述

🕒 5. 浏览器的操作

🕘 5.1 浏览器最大化

// 浏览器最大化
webDriver.manage().window().maximize();
// 浏览器全屏
webDriver.manage().window().fullscreen();

🕘 5.2 浏览器设置大小

webDriver.manage().window().setSize(new Dimension(500,500));

🕘 5.3 浏览器的前进、后退、刷新

webDriver.navigate().forward();
webDriver.navigate().back();
webDriver.navigate().refresh();

🕘 5.4 浏览器滚动条

滚动条的部分主要是通过执行 JavaScript 来实现的

JS代码可以在开发者工具中的console控制台上测试,然后直接作为参数传入

在这里插入图片描述

// 滚动条滚动到最下端
((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000;");
// 滚动条滚动到最上端
((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=0;");

🕘 5.5 浏览器关闭

webDriver.quit();
// webDriver.close();

close 关闭的是当前页面;quit 关闭的是浏览器,同时会删除网站的 cookie。

🕒 6. 键盘事件(组合键)

// 按下 CTRL + A
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL , "A");

🕒 7. 鼠标事件

// 将鼠标移动到对用的元素上
WebElement target = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-wenku_GwhrW.s-tab-wenku"));
actions.moveToElement(target);
// 对元素进行右击
actions.contextClick(target).perform();

在这里插入图片描述

🕒 8. 多层框架/窗口定位

运行以下代码:

<!--inner.html-->
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>inner</title>
</head>
<body>
<div class="row-fluid">
    <div class="span6 well">
        <h3>inner</h3>
        <iframe id="f2" src="https://www.baidu.com/"
                width="700"height="500"></iframe>
        <a href="javascript:alert('watir-webdriver better than selenium webdriver;')">click</a>
    </div>
</div>
</body>
</html>
<!--test02.html-->
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>frame</title>
    <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />
    <script type="text/javascript">$(document).ready(function(){
    });
    </script>
</head>
<body>
<div class="row-fluid">
    <div class="span10 well">
        <h3>frame</h3>
        <iframe id="f1" src="inner.html" width="800", height="600">
            #document
            <html>
            <head>
                <meta http-equiv="content-type" content="text/html;charset=utf-8" />
                <title>inner</title>
            </head>
            <body>
            <div class="row-fluid">
                <div class="span6 well">
                    <h3>inner</h3>
                    <iframe id="f2" src="http://www.baidu.com" width="700"height="500"></iframe>
                    <a href="javascript:alert('watir-webdriver better thanselenium webdriver;')">click</a>
                </div>
            </div>
            </body>
            </html>
        </iframe>
    </div>
</div>
</body>
<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
</html>

在展示的界面中,点击“click”,弹出如下图所示的对话框:
在这里插入图片描述

那么,对于以上的多层框架,如何进行操作呢?

在这里插入图片描述

private static void page02() {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("http://localhost:63342/TestSelenium/src/main/Page/test02.html?_ijt=tcrigb3ftbk2f5atk4olk7kkoa&_ij_reload=RELOAD_ON_SAVE");
    webDriver.switchTo().frame("f1");
    webDriver.findElement(By.cssSelector("body > div > div > a")).click(); // click 元素属于 f1
}

运行以上代码后,可以看到自动选择了 f1 点击了 click 按钮,并弹出了对话框。

在这里插入图片描述

🕒 9. 下拉框处理

<html>
<body>
<select id="ShippingMethod"
        onchange="updateShipping(options[selectedIndex]);" name="ShippingMethod">
    <option value="12.51">UPS Next Day Air ==> $12.51</option>
    <option value="11.61">UPS Next Day Air Saver ==> $11.61</option>
    <option value="10.69">UPS 3 Day Select ==> $10.69</option>
    <option value="9.03">UPS 2nd Day Air ==> $9.03</option>
    <option value="8.34">UPS Ground ==> $8.34</option>
    <option value="9.25">USPS Priority Mail Insured ==> $9.25</option>
    <option value="7.45">USPS Priority Mail ==> $7.45</option>
    <option value="3.20" selected="">USPS First Class ==> $3.20</option>
</select>
</body>
</html>

在这里插入图片描述

我们根据 Value 或 Index 来进行选择,代码如下:

private static void page03() {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("http://localhost:63342/TestSelenium/src/main/Page/test03.html?_ijt=p71tga9t64bih88b6ievirsbro&_ij_reload=RELOAD_ON_SAVE");
    Select select = new Select(webDriver.findElement(By.cssSelector("#ShippingMethod")));
    // 通过 Value 进行修改
    // select.selectByValue("12.51");
    // 通过 Index 进行修改    
    select.selectByIndex(2);    // 选中第3个
}

🕒 10. alert 弹窗

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<button onclick="Click()">这是一个弹窗</button>
</body>
<script type="text/javascript">
    function Click() {
        let name = prompt("请输入姓名:");
        let parent = document.querySelector("body");
        let child = document.createElement("div");
        child.innerHTML = name;
        parent.appendChild(child)
    }
</script>
</html>

在这里插入图片描述
代码如下:

// alert 弹窗确定
webDriver.switchTo().alert().accept();
// alert 弹窗取消
webDriver.switchTo().alert().dismiss();
// alert 弹窗输入
webDriver.switchTo().alert().sendKeys("你好");

在这里插入图片描述

🕒 11. 文件上传

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="file">
</body>
</html>

在这里插入图片描述

webDriver.findElement(By.cssSelector("input")).sendKeys("C:\\Users\\Hins\\Downloads\\测试专栏封面.png");

本质是传送文件路径
在这里插入图片描述

🕒 12. 窗口

private static void windowSwitch() throws InterruptedException {
    // 创建一个驱动
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("https://www.baidu.com/");
    // 点击新闻按钮
    webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
    sleep(1000);
    // 获取到当前的窗口句柄
    String cur_handle = webDriver.getWindowHandle();
    System.out.println("当前窗口句柄等于:" + cur_handle);
    // 获取到浏览器当前所有的窗口句柄
    Set<String> all_handles = webDriver.getWindowHandles();
    String target = "";
    // 遍历当前浏览器所有的窗口句柄
    for (String temp : all_handles) {
        target = temp;
    }
    // 将窗口句柄切换到最后一个(最新)窗口句柄
    webDriver.switchTo().window(target);
    sleep(1000);
    // 找到新闻搜索框
    webDriver.findElement(By.cssSelector("#ww")).sendKeys("软件测试");
    // 点击搜索
    webDriver.findElement(By.cssSelector("#s_btn_wr")).click();
}

在这里插入图片描述

🕒 13. 截图

我们的自动化脚本一般部署在机器上自动的去运行,如果出现了报错,我们是不知道的,可以通过抓拍来记录当时的错误场景

屏幕截图方法需要额外导入依赖到 pom.xml 中:

🔎 依赖网站

在这里插入图片描述

private static void screenshotTest() throws IOException, InterruptedException {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("https://www.baidu.com/");
    webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
    webDriver.findElement(By.cssSelector("#su")).click();
    sleep(1000);
    // 强制类型转换
    File src_file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
    // 将截图复制到指定的文件路径下,并命名
    FileUtils.copyFile(src_file,new File("C:\\Users\\Hins\\Downloads\\screenshot.png"));
}

OK,以上就是本期知识点“Selenium API”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux 的 sed 命令的 使用学习

&#xff08;1&#xff09; sed 概述&#xff1a; &#xff08;2&#xff09; 首先谢谢 b 站这位老师&#xff0c;这位专家的完美讲解 讲解继续&#xff1a; &#xff08;3&#xff09; 关于 sed 里的模式&#xff1a; &#xff08;4&#xff09; sed 支持的常用的对文本编辑的…

LIN总线CAPL函数—— 设置报头同步间隔场长度(linSetBreakLength)

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

爬虫 ----hook

目录 定义&#xff1a; 了解什么是hook? 举例 hook XHR请求 XMLHttpRequest 案例地址&#xff1a; Interceptors-拦截器 HOOK cookie操作 cookie 示范 常见的hook代码总结 1.Hook Cookie 2.Hook Header 3.Hook URL 4.Hook JSON.stringify 5.Hook JSON.parse 6.Ho…

5G Multicast/Broadcast Services(MBS) (四)

这篇是有关MBS RRC相关的一些基本内容,内容不多,但是感觉很关键,主要包括SI,MBS网络侧相关的内容,L2 协议架构,cell reselection prioritity以及MBS接收的一些内容,希望有帮助。 SI 在MBS场景中,SI和常规5G一样分为Minimum SI和Other SI。Minimum SI是MIB和SIB1,Min…

智能创造的幕后推手:AIGC浪潮下看AI训练师如何塑造智能未来

文章目录 一、AIGC时代的算法与模型训练概览二、算法与模型训练的关键环节三、AI训练师的角色与职责四、AI训练师的专业技能与素养五、AIGC算法与模型训练的未来展望《AI训练师手册&#xff1a;算法与模型训练从入门到精通》亮点内容简介作者简介谷建阳 目录 《医学统计学从入门…

Cisco Packet Tracer超详细下载安装教程(附中文版插件)

一、安装包下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1RK8iQ9lJG__vBEGCYVYNSA 提取码&#xff1a;1lvb 压缩包解压密码&#xff1a;66668888&#xff0c;不能正常解压的&#xff0c;推荐使用360压缩解压 二、安装教程&#xff1a; 1.双击启动安装包 2.点击N…

springboot+vue3基于Java的校园二手商品交易系统设计与实现(编号:4259233)

目录 功能和开发技术介绍具体实现截图开发核心技术介绍&#xff1a;技术创新点vue3和vue2的区别&#xff1a;核心代码部分展示非功能需求分析系统开发流程系统运行步骤软件测试源码获取 功能和开发技术介绍 本课题拟采用主流的MVC架构、开发工具idea、java语言编程、MySQL数据…

【Python】入门学习1:开发前的准备

准备工作&#xff1a; 1、电脑系统&#xff1a;windows 64位&#xff1b; 2、python学习所需工具&#xff1a;“解释器、编译器”&#xff1b; &#xff08;1&#xff09;python 解释器&#xff1a;解释代码的&#xff0c;把 python 计算机语言翻译给计算机认识&#xff1b;…

Linux 5.0在start_kernel之前做了什么事?(以aarch64为例)

目录 引言汇编启动&#xff01;&#xff01;&#xff01;细节剖析 引言 之前在研究Linux内核源码的时候总是找不到关于这部分源码的相关剖析&#xff0c;要么也是模棱两可的&#xff0c;也有一些比较专业的代码分析&#xff0c;不过比较分散&#xff0c;感觉大家都不太喜欢这部…

[Excel VBA]如何使用VBA按行拆分Excel工作表

如何使用VBA按行拆分Excel工作表 在Excel中&#xff0c;按行拆分工作表并生成多个新工作表是一项实用的技能&#xff0c;尤其在处理大量数据时。以下是一个VBA代码示例&#xff0c;能帮助你轻松实现这一功能。 1. 代码说明 本代码会根据源工作表中每个姓名创建一个新工作表&a…

ArcGIS核密度分析(栅格处理范围与掩膜分析)

多时候我们在进行栅格分析的时候&#xff0c;处理的结果不能完全覆盖我们需要的范围。 比如&#xff0c;我们对点数据进行密度分析、栅格插值等。比如下图 为什么会如此呢&#xff1f; 那是因为在做这个密度分析或者栅格插值的时候&#xff0c;默认是以点的四至范围来生成的&am…

抖音生活服务入局攻略曝光!普通人也能抓住风口!

当前&#xff0c;抖音生活服务的热度持续飙升&#xff0c;让不少人都有了入局的打算&#xff0c;与之相关的各类话题如抖音生活服务的入局途径有哪些等也因此成为了人们热议的对象。而从这些话题的讨论情况来看&#xff0c;绝大多数讨论者只知道抖音生活服务火爆&#xff0c;却…

​智慧铜矿厂综合管控平台,智慧矿山数字孪生

随着矿山行业的不断发展&#xff0c;传统的管理方式已经无法满足现代铜矿高效、安全、环保和精细化管理的需求&#xff0c;因此&#xff0c;构建一个综合管控平台变得尤为必要。HT 铜矿综合管控平台应运而生&#xff0c;通过信息化和智能化手段&#xff0c;整合采矿、选矿、冶炼…

Redis简单介绍与安装应用

在当今的互联网时代&#xff0c;数据的快速存取和处理变得至关重要。Redis&#xff0c;作为一种高性能的键值存储系统&#xff0c;已经成为许多开发者和企业的首选。本文将简要介绍Redis的基本概念、工作原理以及其在实际应用中的一些典型用例。 一、简介 1&#xff09;概念 …

Vue3:mitt实现组件通信

目录 一.性质 1.轻量级 2.单例 3.异步 4.事件绑定与解绑 二.作用 1.组件间通信 2.解耦 3.状态管理 4.事件的集中处理 三.使用 1.安装mitt 2.引入mitt&#xff1b;调用mitt&#xff1b;暴露mitt 3.组件1 4.组件2 四.代码 1.组件1 2.组件2 五.效果 一.性质 1…

多模态论文串讲-学习笔记(上)

入门参考&#xff1a;跟着chatgpt一起学|多模态入门-CSDN博客 学习参考&#xff1a;多模态论文串讲上【论文精读46】_哔哩哔哩_bilibili&#xff0c;强烈推荐这个博主啊&#xff0c;感觉比沐神讲的还要清楚&#xff0c;非常喜欢。 本文介绍只使用transformer encoder的方法&a…

医院为什么要安装医疗设备防漏费系统?

一、医院防漏费管理的重要性 随着人们健康意识的加强&#xff0c;医生对诊断的依据都造就了检查和化验在新形式下的重要性。人们对体检重要性的认识等各方面因素。导致了现在医院检查和化验位置一度提升。成为了医院工作的重中之中。而在中国国情的大环境下&#xff0c;熟人检…

20240923 每日AI必读资讯

GPT-4o能玩《黑神话》&#xff01;精英怪胜率超人类&#xff0c;无强化学习纯大模型方案 - 阿里巴巴的研究人员们提出了一个新型VARP&#xff08;视觉动作角色扮演&#xff09;智能体框架。 - 能直接将游戏截图作为输入&#xff0c;通过视觉语言模型推理&#xff0c;最终生成…

超强AI绘画工具StableDiffusion,SD整合包V4.9 来了 版本win加mac安装包以及搭载PS安装说明

众所周知&#xff0c;StableDiffusion 是非常强大的AI绘图工具&#xff0c;今天为大家带来的是 Stable Diffusion SD整合包v4.9 版本安装说明 。 这里带来的安装版本是9月最新整合包sd-webui-aki-v4.9 版本 。WIN加MAC stable diffusion整合包可以扫描下方&#xff0c;免费获取…

Spring实战——入门讲解

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 Spring介绍 Spring实战的入门讲解主要涵盖了Spring框架的基本概念、核心功能以及应用场景。以下是关于Spring实战入门的具体介绍&#xff1a; Spring框架概述&#xff1a;Spring是一个轻量级的Java开发框架…