Selenium的使用

news2024/11/26 1:04:04

一、基础

1、特点

selenium 是web中基于UI的自动化测试工具,它支持多平台、多语言、多浏览器,还有丰富的API。

2、原理

自动化脚本代码会创建一个http请求发送给浏览器驱动进行解析,浏览器驱动会操控浏览器执行测试,浏览器接着会返回给http server并传给浏览器驱动,浏览器驱动收到后就会把结果返回给脚本。

 二、Selenium API

定位元素

1、CSS selector

1.1、id 选择器(#+id值)

1.2、类选择器(.+类名)

1.3、标签选择器(input 是标签名)

1.4、后代选择器(div form span #kw (子选择器和父选择器纸质件用空格隔开))

2、XPath定位元素

2.1、绝对路径:(以单斜杠“/”开头)

2.2、相对路径:(以双斜杠“//”开头)

(1)相对路径+索引

PS:不加索引的话默认索引为1 

(2)相对路径+元素

(3)相对路径+通配符

(4)相对路径+部分元素定位

(5)相对路径+文本定位

 2.3、xpath 的缺点:定位元素效率很低

(1)性能问题:在匹配大量数据时,XPath 的性能可能会比较低。因为 XPath 是基于遍历文档树来实现节点查找的,所以当文档树非常大时,XPath 可能会导致性能问题。

(2)语法复杂:XPath 语法相对于 CSS Selector 和其他选择器来说比较复杂,需要掌握较多的语法规则才能编写出有效的 XPath 表达式。

(3)对浏览器的支持度较低:在某些浏览器中,XPath 的支持度可能不如 CSS Selector,需要更高版本的浏览器才能支持 XPath。

(4)学习成本较高:XPath 语法比较复杂,需要学习较多的 XPath 规则和操作符,需要花费较多的时间和精力来掌握。

(5)可读性较差:XPath 表达式较为冗长,可读性不如 CSS Selector 和其他选择器。

3、应用

3.1、网页的打开与关闭

private static void test01() {
        ChromeOptions options = new ChromeOptions();//创建了一个option对象,用来给请求设置一些参数
        options.addArguments("--remote-allow-origins=*");//允许所有请求
        WebDriver webDriver = new ChromeDriver(options);//创建一个驱动
        webDriver.get("https://www.baidu.com");//打开百度网页
        webDriver.quit();//关闭网页
    }

3.2、定位元素的使用

    private static void test02() throws InterruptedException {
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver=new ChromeDriver(options);
        webDriver.get("https://www.baidu.com/");//打开百度
//        webDriver.findElement(By.cssSelector("#kw")).sendKeys("selenium");//输入内容
//        webDriver.findElement(By.cssSelector("#su")).click();//点击“百度一下”按钮
        //PS:右键-copy-selector,即可自动粘贴得到CSS的定位元素。右键-copy-xpath,即可自动粘贴得到xpath的定位元素。
//        webDriver.findElement(By.xpath("//*[@id=\"su\"]")).click();

        webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");//输入内容
        webDriver.findElement(By.cssSelector("#su")).click();//点击“百度一下”按钮
        webDriver.findElement(By.cssSelector("#su")).submit();
        List<WebElement> webElements = webDriver.findElements(By.cssSelector("em"));//找到所有的“软件测试”文案对应的元素
        sleep(4000);
        if(String.valueOf(webElements.size()).equals("0"))
            System.out.println("测试不通过");
        else System.out.println("测试通过");
    }

3.3、使用 getAttribute( ) 来获取文本元素

    private static void test03() throws InterruptedException {
        ChromeOptions options = new ChromeOptions();//创建对象
        options.addArguments("--remote-allow-origins=*");//允许请求
        WebDriver webDriver = new ChromeDriver(options);//创建驱动
        webDriver.get("https://www.baidu.com");//打开网址        
   
  System.out.println(webDriver.findElement(By.cssSelector("#su")).getAttribute("value"));//获取元素文本
        sleep(3000);

    }

3.4、休眠等待

private static void test05() throws InterruptedException {
        ChromeOptions options = new ChromeOptions();//创建了一个option对象,用来给请求设置一些参数
        options.addArguments("--remote-allow-origins=*");//允许所有请求
        WebDriver webDriver = new ChromeDriver(options);//创建一个驱动
        webDriver.get("https://www.baidu.com");//打开百度网页
        
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("测试");//找到搜索输入框
        webDriver.findElement(By.cssSelector("#kw")).click();//点击搜索
        sleep(2000);
        webDriver.findElement(By.cssSelector("#kw")).clear();//清空
    }

3.5、隐式等待

 private static void test06() {
        ChromeOptions options = new ChromeOptions();//创建了一个option对象,用来给请求设置一些参数
        options.addArguments("--remote-allow-origins=*");//允许所有请求
        WebDriver webDriver = new ChromeDriver(options);//创建一个驱动
        webDriver.get("https://www.baidu.com");//打开百度网页
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("测试");//找到搜索输入框
        webDriver.findElement(By.cssSelector("#kw")).click();//点击搜索
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#kw")).clear();//清空
        webDriver.quit();

    }

3.6、显示等待

private static void test13() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
//        webDriver.get("https://www.baidu.com/");
        webDriver.get("http://localhost:63342/Selenium01/src/main/Page/test02.html?_ijt=2vluji84bvnav2oi5ag029tntc&_ij_reload=RELOAD_ON_SAVE");
        sleep(3000);
        WebDriverWait wait = new WebDriverWait(webDriver, 50);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
//        wait.until(ExpectedConditions.titleIs("百度一下,你就知道"));
        wait.until(ExpectedConditions.textToBe(By.cssSelector("h3"), "frame"));
        webDriver.quit();
    }

PS:显示等待和隐式等待:

相同点:都属于只能等待。

区别:隐式等待等待的是页面上的所有元素;显示等待条件满足即可。

3.7、获取当前页面的 url

 private static void test07() {
        ChromeOptions options = new ChromeOptions();//创建了一个option对象,用来给请求设置一些参数
        options.addArguments("--remote-allow-origins=*");//允许所有请求
        WebDriver webDriver = new ChromeDriver(options);//创建一个驱动
        webDriver.get("https://www.baidu.com/");//打开百度网页
        String url=webDriver.getCurrentUrl();//获取当前页面的Url
        System.out.println(url);
        System.out.println(webDriver.getCurrentUrl());
        if(url.equals("https://www.baidu.com/"))
            System.out.println("successfully!");
        else System.out.println("failed!");
    }

3.8、获得页面题目

private static void test08() {
        ChromeOptions options = new ChromeOptions();//创建了一个option对象,用来给请求设置一些参数
        options.addArguments("--remote-allow-origins=*");//允许所有请求
        WebDriver webDriver = new ChromeDriver(options);//创建一个驱动
        webDriver.get("https://www.baidu.com/");//打开百度网页
        String tittle = webDriver.getTitle();
        if(tittle.equals(("百度一下,你就知道")))
            System.out.println("successfully!");
        else System.out.println("failed!");
        webDriver.quit();

    }

3.9、页面操作

private static void test09() {
        ChromeOptions options = new ChromeOptions();//创建了一个option对象,用来给请求设置一些参数
        options.addArguments("--remote-allow-origins=*");//允许所有请求
        WebDriver webDriver = new ChromeDriver(options);//创建一个驱动
        webDriver.get("https://www.baidu.com/");//打开百度网页
        //webDriver.manage().window().maximize();//最大化
        //webDriver.manage().window().fullscreen();//全屏
        //webDriver.manage().window().setSize(new Dimension(500,500));//设置长宽

        webDriver.quit();
    }
private static void test10() throws InterruptedException {
        ChromeOptions options = new ChromeOptions();//创建了一个option对象,用来给请求设置一些参数
        options.addArguments("--remote-allow-origins=*");//允许所有请求
        WebDriver webDriver = new ChromeDriver(options);//创建一个驱动
        webDriver.get("https://www.baidu.com/");//打开百度网页
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("测试");
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        webDriver.navigate().back();//返回上个页面
        sleep(3000);
        webDriver.navigate().forward();//返回下个页面
        sleep(3000);
        webDriver.navigate().refresh();//页面刷新
    }

3.10、键盘操作

private static void test11() throws InterruptedException {
        ChromeOptions options = new ChromeOptions();//创建了一个option对象,用来给请求设置一些参数
        options.addArguments("--remote-allow-origins=*");//允许所有请求
        WebDriver webDriver = new ChromeDriver(options);//创建一个驱动
        webDriver.get("https://www.baidu.com/");//打开百度网页
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("测试");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL+"A");//全选
        sleep(3000);
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL+"x");//剪贴
        sleep(3000);
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL+"v");//粘贴
        sleep(3000);
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL+"c");//复制
        sleep(3000);
        webDriver.findElement(By.cssSelector("#su")).click();
    }

3.11、

(1)选择框

private static void page01() {
        // 创建一个浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 打开网页
        webDriver.get("http://localhost:63342/demo1/src/main/Page/test01.html?_ijt=cbdunvqogtv9nna66fteho4pe2&_ij_reload=RELOAD_ON_SAVE");
        // 获取到所有的input标签对应的元素
        List<WebElement> webElements = webDriver.findElements(By.cssSelector("input"));
        // 判断每一个input标签里面type值是checkbox进行点击,否则不点击
        for(int i = 0; i < webElements.size(); i++) {
            if(webElements.get(i).getAttribute("type").equals("checkbox")) {
                webElements.get(i).click();
            } else {
            }
        }
    }
<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="r1">radio</label>
            <div class="controls">
                <input type="radio" id="r1" />
            </div>
        </div>
        <div class="control-group">
            <label class="control-label" for="r2">radio</label>
            <div class="controls">
                <input type="radio" id="r2" />
            </div>
        </div>
    </form>
</div>
</body>
</html>

 (2)一个框

private static void page02() {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 打开网页
        webDriver.get("http://localhost:63342/Selenium01/src/main/Page/test02.html?_ijt=2vluji84bvnav2oi5ag029tntc&_ij_reload=RELOAD_ON_SAVE");
        // 找到click元素点击
        webDriver.switchTo().frame("f1");
        webDriver.findElement(By.cssSelector("body > div > div > a")).click();
        // 目标元素不在iframe,可以直接获取
//        String h3_text = webDriver.findElement(By.cssSelector("body > div > div > h3")).getText();
//        System.out.println(h3_text);
    }
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>frame</title>
    <link href="https://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"></iframe>
    </div>
</div>
</body>
<script src="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
</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>

(3)下拉框

private static void page03() {
        // 创建浏览器驱动
        WebDriver webDriver = new ChromeDriver();
        // 打开网页
        webDriver.get("http://localhost:63342/demo1/src/main/Page/test02.html?_ijt=hkofpkrsk74h8dbbip255s6dm3&_ij_reload=RELOAD_ON_SAVE");
        // 操作下拉框
        Select select = new Select(webDriver.findElement(By.cssSelector("#ShippingMethod")));
//        select.selectByValue("12.51");
        select.selectByIndex(2);
    }
<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>

(4) alert 弹窗操作

private static void page04() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/demo1/src/main/Page/test04.html?_ijt=hkofpkrsk74h8dbbip255s6dm3&_ij_reload=RELOAD_ON_SAVE");
        webDriver.findElement(By.cssSelector("button")).click();
        sleep(3000);

//        webDriver.switchTo().alert().accept();// alert弹窗确定
//        webDriver.switchTo().alert().dismiss();// alert弹窗取消

        webDriver.switchTo().alert().sendKeys("你好");
        webDriver.switchTo().alert().accept();
    }
<!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>

(5)文件上传

private static void page05() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/Selenium01/src/main/Page/test05.html?_ijt=tmsdfhdm1lf1ururkjefb479tj&_ij_reload=RELOAD_ON_SAVE");
        // 找到按钮(上传文件的按钮),输入一个字符串
        webDriver.findElement(By.cssSelector("input")).sendKeys("D:\\dowloadSoftware\\Chrome");
    }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="file">
</body>
</html>

3.12、浏览器滚动条的操作

private static void test14() throws InterruptedException {

        Duration timeOut = Duration.ofMillis(5000);
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件");
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        ((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000;");
    }

3.13、浏览器的关闭

close:关闭的是当前页面。不会清除cookie这些信息。

quit:关闭的是浏览器。会清除cookie这些信息。

private static void test16() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        webDriver.close();
    }

    private static void test15() throws InterruptedException, IOException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/demo1/src/main/Page/test02.html?_ijt=hkofpkrsk74h8dbbip255s6dm3&_ij_reload=RELOAD_ON_SAVE");
        sleep(5000);
        File src_file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(src_file, new File("D:\\code-bit-2023\\test\\jietu.png"));
        webDriver.quit();
    }

3.14、窗口切换

private static void test17() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        // 获取到浏览器所有的窗口句柄
        Set<String> handles = webDriver.getWindowHandles();
        String target_handle = "";
        for(String handle:handles) {
            target_handle = handle;
        }
        System.out.println(target_handle);
        webDriver.switchTo().window(target_handle);
        webDriver.findElement(By.cssSelector("#header-link-wrapper > li:nth-child(3) > a")).click();
    }

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

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

相关文章

AirServer电脑通用版下载及使用教程

AirServer 是一款功能十分强大的投屏软件&#xff0c;支持并适用于 Windows和Mac。AirServer 是接收方&#xff0c;而不是发送方。 AirServer 只允许您接收镜像或流媒体内容&#xff0c;反之则不行。AirServer虽然功能十分强大&#xff0c;但是整体操作和使用都十分简单&#x…

如何在华为OD机试中获得满分?Java实现【知识图谱新词挖掘1】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

【STL】list的模拟实现

目录 前言 结构解析 默认成员函数 构造函数 拷贝构造 赋值重载 析构函数 迭代器 const迭代器 数据修改 insert erase 尾插尾删头插头删 容量查询 源码 前言 &#x1f349;list之所以摆脱了单链表尾插麻烦&#xff0c;只能单向访问等缺点&#xff0c;正是因为其…

日常 - HttpURLConnection 网络请求 TLS 1.2

文章目录 环境前言HTTPS 请求流程服务端支持JDK 验证资源 环境 JDK 8 Hutool 4.5.1 前言 应供应商 DD 的 TLS 版本升级通知&#xff0c;企业版接口升级后 TLS 1.0 及 1.1 版本请求将无法连接&#xff0c;仅支持 TLS 1.2 及以上版本的客户端发起请求。 当前项目使用 Hutool …

有序表2:跳表

跳表是一个随机化的数据结构&#xff0c;可以被看做二叉树的一个变种&#xff0c;它在性能上和红黑树&#xff0c;AVL树不相上下&#xff0c;但是跳表的原理非常简单&#xff0c;目前在Redis和LeveIDB中都有用到。 它采用随机技术决定链表中哪些节点应增加向前指针以及在该节点…

找不到“SqlServer”模块-- 在此计算机上找不到任何 SQL Server cmdlet。

https://github.com/PowerShell/PowerShell/releases/tag/v7.2.2SQL Server Management Studio 18 启动触发器报错 标题: 找不到“SqlServer”模块 --------------- 在此计算机上找不到任何 SQL Server cmdlet。 在 https://powershellgallery.com/packages/SqlServer 上获取“…

PyTorch深度学习实战(1)——神经网络与模型训练过程详解

PyTorch深度学习实战&#xff08;1&#xff09;——神经网络与模型训练过程详解 0. 前言1. 传统机器学习与人工智能2. 人工神经网络基础2.1 人工神经网络组成2.2 神经网络的训练 3. 前向传播3.1 计算隐藏层值3.2 执行非线性激活3.3 计算输出层值3.4 计算损失值3.5 实现前向传播…

Linux——应用层之序列号与反序列化

TCP协议通讯流程 tcp是面向连接的通信协议,在通信之前,需要进行3次握手,来进行连接的建立。 当tcp在断开连接的时候,需要释放连接,4次挥手 服务器初始化: 调用socket, 创建文件描述符; 调用bind, 将当前的文件描述符和ip/port绑定在一起; 如果这个端口已经被其他进程占用了…

【机器学习】9种回归算法及实例总结,建议学习收藏

我相信很多人跟我一样&#xff0c;学习机器学习和数据科学的第一个算法是线性回归&#xff0c;它简单易懂。由于其功能有限&#xff0c;它不太可能成为工作中的最佳选择。大多数情况下&#xff0c;线性回归被用作基线模型来评估和比较研究中的新方法。 在处理实际问题时&#…

VirtualBox安装增强功能

在刚安装完的VisualBox中&#xff0c;默认屏幕是固定设置的&#xff0c;不会根据实际的窗口大小做自适应&#xff0c;这时候我们需要【安装增强功能】&#xff0c;然后打开【自动调整显示大小】&#xff0c;就可以实现虚拟机中屏幕自适应。 本教程的软件环境如下&#xff1a; 宿…

数据结构: 第四章 串

文章目录 一、串的定义和实现1.1串的定义和基本操作1.1.1串的定义1.1.2串的基本操作1.1.3小结 1.2串的存储结构1.2.1顺序存储1.2.2链式存储1.2.3基于顺序存储实现基本操作1.2.4小结 二、串的模式匹配2.1什么是字符串的模式匹配2.2朴素模式匹配算法2.3KMP算法2.4求next数组2.5KM…

python+django协同过滤算法的美食O2O外卖点餐系统vue

当然使用的数据库是mysql。尽管没有面向对象的数据库的作用强大&#xff0c;但是在Python开发上还是比较的灵活和方便的。系统功能主要介绍以下几点&#xff1a; 本外卖点餐系统主要包括二大功能模块&#xff0c;即用户功能模块和管理员功能模块。 &#xff08;1&#xff09;管…

Linux上安装jdk Tomcat mysql redis

1.安装JDk 1.1这里使用xshell中xfxp进行文件的上传&#xff0c;将jdk二进制包上传到Linux服务器上 下载地址&#xff1a;Java Downloads | Oracle 或者这里有下载好的安装包&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1ZSJxBDzDaTwCH2IG-d2Gig 提取码&#xff1a;…

dubbo 3.2.0 consumer bean初始化及服务发现简记

consumer bean初始化 以spring 如下配置<dubbo:reference id"versionConsumerBean" interface"org.apache.dubbo.samples.version.api.VersionService" version"*"/>为例&#xff0c;先使用spring 的初始化&#xff0c;核心代码 try {fin…

EDR(端点、端点检测与响应中心、可视化展现)

EDR基本原理与框架 EDR定义 端点检测和响应是一种主动式端点安全解决方案&#xff0c;通过记录终端与网络事件&#xff08;例如用户&#xff0c;文件&#xff0c;进程&#xff0c;注册表&#xff0c;内存和网络事件&#xff09;&#xff0c;并将这些信息本地存储在端点或集中数…

C#,码海拾贝(26)——求解“一般带状线性方程组banded linear equations”之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> /…

Redis五大基本数据结构(原理)

一、 Redis数据结构-String String是Redis中最常见的数据存储类型&#xff1a; 其基本编码方式是RAW&#xff0c;基于简单动态字符串&#xff08;SDS&#xff09;实现&#xff0c;存储上限为512mb。 如果存储的SDS长度小于44字节&#xff0c;则会采用EMBSTR编码&#xff0c;…

c++ 11标准模板(STL) std::map(六)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

优化器| SGD/SGD-m/SGD-NAG/Adagrad/Adadelta/RMSProp/Adam/Nadam/Adamax

前言&#xff1a;最近准备复习一下深度学习的基础知识&#xff0c;开个专栏记录自己的学习笔记 各种SGD和Adam优化器整理 基本概念 优化&#xff1a;最大化或最小化目标函数&#xff0c;具体指最小化代价函数或损失函数 损失函数 J(θ)f(hθ(x)&#xff0c;y)&#xff0c;h…

软考A计划-试题模拟含答案解析-卷五

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…