Selenium的使用

一、基础

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();
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg编译成wasm

最近在看ffmpeg的源码 https://ffmpeg.xianwaizhiyin.net/ffplay/ https://crifan.github.io/media_process_ffmpeg/website/audio_process/ 做个可运行的例子 代码在找了一堆&#xff0c;可用的版本放在这 https://github.com/killinux/ffmpeg_wasm_demo 先把ffmpeg 编译成 …

内蒙古自治区出台加快充换电基础设施建设实施方案

摘要&#xff1a;为深入贯彻落实《国务院办公厅关于印发新能源汽车产业发展规划&#xff08;2021—2035年&#xff09;的通知》&#xff08;国办发 ﹝2020﹞39号&#xff09;、《国家发展改革委等部门关于进一步提升电动汽车充电基础设施服务保障能力的实施意见》&#xff08;发…

Unity——在C#中调用C++动态链接库(DLL)

一、创建C动态链接库&#xff08;DLL&#xff09; 1、新建C空项目 打开VS&#xff0c;新建一个C空项目&#xff0c;自命名项目名称与位置。 2、配置项目属性为动态链接库 右键项目&#xff0c;点击属性&#xff0c;打开项目属性页&#xff0c;将常规中的配置类型改为动态库&…

电力电子技术的论文

电力电子技术的论文范文一&#xff1a;Matlab电力电子技术应用 【文章摘要】信息技术的快速发展推动许多学科进一步完善&#xff0c;以电力电子技术为例&#xff0c;其本身具有较强的理论性、实践性等特征&#xff0c;涉及的波形图、电路图也较多&#xff0c;相关设计人员需掌握…

【C++初阶】C++STL详解(一)—— string类

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C初阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 CSTL详解&#xff08;一…

新华三的网络脉动:为AI泵血,向产业奔流

AI大模型作为最新的通用技术&#xff0c;今年以来&#xff0c;发展如火如荼。也有很多从业者和专家注意到&#xff0c;AI模型训练和应用过程中&#xff0c;需要优先考虑网络的升级与适配。 如果说数据中心、算力集群是AI的“心脏”&#xff0c;那么网络就犹如AI的“动脉”&…

综合指挥调度系统行业分类汇总

综合指挥调度系统是将语音、视频、GIS进行高度融合&#xff0c;构建“平战结合”的指挥调度模式&#xff0c;既满足平时的应急培训、日常通信、会议会商等要求&#xff0c;也能够应对战时的应急指挥、应急救援、应急决策等需求&#xff0c;达到统一指挥、联合行动的目的&#x…

ArduPilot之H743+BMI270x2+First Normal Takeoff

ArduPilot之H743BMI270x2First Normal Takeoff 1. 源由2. 正常起飞3. 问题汇总3.1 机架构型3.2 IMU对齐3.3 接收机3.4 GPS3.5 VTX3.6 电调3.7 PID 4. 总结5. 参考资料6. 附录6.1 补充AcroTrainer视频6.2 补充Acro视频 1. 源由 鉴于目前该飞控板子在ArduPilot开源社区尚未得到官…

15.2:分金条的最小代价

一块金条切成两半&#xff0c;是需要花费和长度数值一样的铜板 比如长度为20的金条&#xff0c;不管怎么切都要花费20个铜板&#xff0c;一群人想整分整块金条&#xff0c;怎么分最省铜板? 例如&#xff0c;给定数组{10,20,30}&#xff0c;代表一共三个人&#xff0c;整块金条…

笔试强训错题总结(一)

笔试强训错题总结 文章目录 笔试强训错题总结选择题编程题连续最大和不要二最近公共祖先最大连续的bit数幸运的袋子手套 选择题 以下程序的运行结果是&#xff08;&#xff09; #include <stdio.h> int main(void) {printf("%s , %5.3s\n", "computer&q…

chatgpt赋能python:Python反转输出正整数-让计算更简单

Python反转输出正整数-让计算更简单 Python是一种高级编程语言&#xff0c;除了可以完成各种任务&#xff0c;还可以反转输出正整数。在本篇SEO文章中&#xff0c;我将介绍如何使用Python编程语言反转输出正整数&#xff0c;并且展现了这个方法是如何简化计算。 什么是Python…

linux网络初探

linux网络 1.1查看本机ip IP地址 IP地址网络地址主机地址&#xff0c;网络地址&#xff08;网络号&#xff09;相同的主机为本地网络中的主机&#xff0c;可以直接相互通信&#xff0c;而网络地址不同的主机为远程网络中的主机&#xff0c;相互通信必须通过本地网关&#xf…

重学迭代器和生成器

重学迭代器和生成器 之前在 JavaScript 高级程序设计第 7 章 迭代器和生成器 学习笔记 其实包含过 iterator 和 generator 的学习笔记&#xff0c;不过依旧温故而知新&#xff0c;有了一些实际上手的经验后重新再回滚一边会有比较深刻的理解&#xff0c;而不是只是 cv 书上的内…

python+pytest接口自动化之HTTP协议基础

目录 HTTP协议简介 HTTP协议特点 HTTP接口请求方法 HTTP与HTTPS区别 HTTP与TCP/IP区别 HTTP请求过程 总结 HTTP协议简介 HTTP 即 HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09;&#xff0c;是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件…

【全面突击数据结构与算法001】绪论篇,数据结构的基本概念

&#x1f341;前言 &#x1f451;作者主页&#xff1a;&#x1f449;CSDN丨博客园 &#x1f3c6;学习交流&#xff1a;&#x1f449;在下周周ovoの社区 &#x1f48e;全面突击数据结构与算法系列专栏&#xff1a;&#x1f449;数据结构与算法专栏 PS&#xff1a;本篇文章主要综…

机器学习——线性回归篇

基本概念 什么是回归预测&#xff1f;什么是分类预测&#xff1f; 模型输入变量预测结果应用回归预测实值离散一个连续值域上的任意值预测值的分布情况分类预测实值离散两个或多个分类值将输入变量分类到不同类别 思考一个问题&#xff1a;分类问题是否可以转变为回归问题&am…

R:GAM非线性回归曲线拟合与散点密度图绘制

作者:CSDN @ _养乐多_ 本文将介绍使用R语言以及GAM模型,绘制回归曲线和散点密度图。 文章目录 一、R语言脚本二、色带一、R语言脚本 install.packages("ggpointdensity") install.packages("ggplot2") insta

问题解决:cmd中创建文件夹被拒绝访问。

问题&#xff1a; 在cmd中准备创建一个B盘node.js文件夹下的一个node_global文件被拒绝访问出错。 Microsoft Windows [版本 10.0.19045.2965] (c) Microsoft Corporation。保留所有权利。C:\Users\SueMagic>md B:\nodejs\node_global 拒绝访问。C:\Users\SueMagic>原因…

【分享】科大讯飞星火认知大模型(初体验)

前言&#xff1a; 哈喽&#xff0c;大家好&#xff0c;我是木易巷~ 随着人工智能技术的迅猛发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;成为了热门话题。在众多NLP模型中&#xff0c;科大讯飞星火认知大模型成为了一个备受瞩目的新秀&#xff0c;今天我们来了解…

【MySQL】MySQL的事务原理和实现?

文章目录 MySQL事务的底层实现原理一、事务的目的可靠性和并发处理 二、实现事务功能的三个技术2.1 redo log 与 undo log介绍2.1.1 redo log2.1.2undo log 2.2 mysql锁技术2.2.1 mysql锁技术 2.3 MVCC基础 三、事务的实现3.1 原子性的实现3.1.1 undo log 的生成3.1.2 根据undo…