Selenium常用API详解,从入门到进阶(全套)

目录
1、打开页面
2、查找页面元素
3、输入文本
4、点击操作
5、提交操作
6、清除文本
7、获取文本、属性
8、获取页面的标题和URL
9、窗口
9.1、设置窗口大小
9.2、窗口切换
9.2.1、为什么需要窗口切换?
9.2.2、获取句柄的方式
9.2.3、切换句柄
10、屏幕截图
10.1、为什么需要屏幕截图
10.2、屏幕截图应用
11、等待
11.1、强制等待
11.2、隐式等待
11.3、显示等待
12、浏览器导航
12.1、前进、后退、刷新
13.弹窗
13.1、弹窗类型
13.2、处理弹窗的步骤
13.3、示例
14、选择框
14.1、处理步骤
14.2、示例
15、执行脚本
16、文件上传
16.1、使用方式
16.2、示例
17、浏览器参数设置
结语
1、打开页面
在Selenium中,通过在ChromeDriver类中的get方法里输入网址,即可打开一个页面,例如你要打开百度的网址,如下代码:
ChromeDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com/");
Ps:本文讲的所有API都是基于谷歌浏览器驱动,也就是ChromeDriver类下的API~
2、查找页面元素
在Selenium中,在打开页面的情况下,通过indElement方法,输入By类(通过什么方式来定位元素)参数,即可定位页面元素。
例如定位百度页面的“百度一下”按钮,如下代码:
driver.findElement(By.cssSelector("#su"));//#su就是"百度一下"的CSS选择器
上述栗子中使用的是CSS选择器定位,你也可以使用xpath来定位~
详细的,如下:
By类中最常用的两个定位方法:
1. cssSelector(),它可以通过css选择器来定位元素;(推荐使用)
2. className(),它可以通过xpath来定位元素;
xpath如何使用呢?
最常用的是用层级的方式来表示: /子级 //跳级;(@为属性)
例如:谷歌浏览器中的Google标志

这样你就可以拿到这个标签的xpath://*[@id="logo"] 这便是跳级(前面的路径都不显示,直接表示属性id=“logo”这个标签)
或者是xpath://*[@id="csdn-copyright-footer"]/ul[1]/li[2]/a 这便是一个跳级加子集的方式;
值得注意的是:我们不要一个一个去推这个子集表示的方式,可以直接按照上图的方式进行拷贝xpath路径,配合着className()方法使用即可,但是有时候赋值selector或者xpath元素不一定是唯一的,需要我们进行手动修改到唯一(检查的时候通过 ctrl + f 即可检查是否唯一),这就是为什么我们要对xpath的语法要有一定了解的原因;
3、输入文本
在Selenium中,使用sendKeys方法即可对你选中的元素进行输入文本,但是仅适用于文本文字和内容可以编辑的元素,例如在百度页面的搜索框内输入“你好”,如下代码:
//先使用findElement定位元素(返回一个WebElement类型的元素),再对定位的元素进行输入文本
driver.findElement(By.cssSelector("#kw")).sendKeys("你好");
Ps:即使反向操作,也就是对不可编辑的元素进行操作,也不会报错,但是不会产生任何实际效果。
4、点击操作
在Selenium中,对你定位到的元素使用click方法,即可进行鼠标点击操作,例如点击百度界面的“百度一下”按钮,代码如下:
//先使用findElement定位元素(返回一个WebElement类型的元素),再进行click
driver.findElement(By.cssSelector("#su")).click();
5、提交操作
提交操作是干什么的?实际上就和你按下Enter键的效果是一样的,通过submit方法即可实现,例如在百度页面通过submit方法实现自动按下回车键,如下代码:
//先使用findElement定位元素(返回一个WebElement类型的元素),再进行submit
driver.findElement(By.cssSelector("#su")).submit();
Ps:selenium官方不推荐使用submit,更推荐click,因为可以使用submit的地方click都能代替,并且click使用场景更广(submit仅适用于表单元素)。
6、清除文本
在Selenium中,可以使用clear将你定位的元素的文本内容进行清除,例如清除百度输入框中的文本,如下代码:
driver.findElement(By.cssSelector("#kw")).clear();
Ps:用来频繁的测试是否可以重复输入(适用sendKeys输入后,在用clear清除、再输入然后清除......)。
7、获取文本、属性
在Selenium中,通过getText可以获取你定位的元素的文本,例如获取百度页面热搜中的文本,如下代码:

//获取到的文本返回值是一个String类型
String text = driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a > span.title-content-title")).getText();
System.out.println(text);
但如果你要获取“百度一下”这个按钮的文本就无法获取(但程序不会报错,只是返回一个空字符串),因为这个元素它不含文本,只有一些属性(id、class、type、value......),如下F12检查可以看到:
![]()
所以我们只能获取它的属性,那么属性该如何获取呢?通过getAttribute方法即可获取到,方式和获取文本一样,先定位元素,再获取;例如你要获取class属性,那么就是getAttribute("class);
8、获取页面的标题和URL
在Selenium中,这个没什么特别要注意的点,基础操作,直接上代码:
System.out.println(driver.getTitle());
System.out.println(driver.getCurrentUrl());
9、窗口
9.1、设置窗口大小
在Selenium中,可以设置窗口的大小:最大化、最小化、全屏窗口、手动设置窗口大小;如下代码:
//窗口最大化driver.manage().window().maximize();//窗口最小化driver.manage().window().minimize();//全屏driver.manage().window().fullscreen();//手动设置大小(按顺序分别是宽和高)driver.manage().window().setSize(new Dimension(1024, 500));
9.2、窗口切换
9.2.1、为什么需要窗口切换?
想象这样一个场景,我们使用Selenium打开一个网页,在从这个网页通过click点击超链接打开另一个网页,那么我们继续使用Selenium操作网页时,是对刚刚这两个网页中的哪一个网页进行操作?实际上还是第一个网页,如果你一意孤行还认为是对第二个网页进行操作,就有可能引发如下异常:(找不到该元素)
![]()
实际上,当浏览器每次打开一个标签页的时候,都会自动给每个标签页进行标识,也叫做“句柄”。
9.2.2、获取句柄的方式
在Selenium中,我们有如下两种方式获得句柄:
//获取所有标签页的句柄Set<String> handles = driver.getWindowHandles();//获取当前页面的句柄String curHandle = driver.getWindowHandle();
并且哪个页面对应哪个句柄,我们是不可知的,例如我打开了两个页面,获取句柄并打印,如下:
![]()
9.2.3、切换句柄
//获取当前页面的句柄String curHandle = driver.getWindowHandle();//切换到curHandle句柄driver.switchTo().window(curHandle);
Ps:自动化基本没有需要切换窗口的场景,因为要进行测试,就直接拿到这个网页的地址即可,没必要这样切换!
10、屏幕截图
10.1、为什么需要屏幕截图
想象一下,程序执行的速度 和 页面渲染的速度 谁快?必然是程序执行快,那么当代码执行到查找结果页的元素时,页面还没有加载完全,程序就会报错,如下代码:
public void test2() {ChromeDriver driver = new ChromeDriver();//打开百度页面driver.get("https://www.baidu.com");//在输入框中输入"你好"driver.findElement(By.cssSelector("#kw")).sendKeys("你好");//点击“百度一下”按钮driver.findElement(By.cssSelector("#su")).click();//点击一个搜索结果driver.findElement(By.cssSelector("#\\31 > div > div > h3 > a")).click();driver.close();}
报错,如下图(找不到该元素)

解决办法:在点击“百度一下”这个按钮以后,休眠几秒即可(等待页面加载出来)。
但是自动化程序执行的速度非常快,我们怎么能知道这个地方出了什么问题呢?接着往下看~
10.2、屏幕截图应用
首先需要在pom.xml中导入依赖,如下:
<!-- 保存屏幕截图文件需要用到的包 --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>
接着如下代码:
public void test2() throws IOException {ChromeDriver driver = new ChromeDriver();//打开百度页面driver.get("https://www.baidu.com");//在输入框中输入"你好"driver.findElement(By.cssSelector("#kw")).sendKeys("你好");//点击“百度一下”按钮driver.findElement(By.cssSelector("#su")).click();//屏幕截图(保存现场)File srcfile = driver.getScreenshotAs(OutputType.FILE);//FILE表示以文件的形式保存//把截图保存到指定路径下String filename = "my.png";//没输入路径,就是当前项目下FileUtils.copyFile(srcfile, new File(filename));//点击一个搜索结果driver.findElement(By.cssSelector("#\\31 > div > div > h3 > a")).click();driver.close();}
接着就可以观察到截图如下:

这样我们就可以发现原因,是由于页面没有加载出来的原因~
Ps:保存截图的时候,文件名时固定的格式(已经存在重名文件),程序多次生成的截图都会被同名覆盖,为了避免这个情况,我们可以将文件名设置为动态的,也就是加入时间戳。
11、等待
我们知道,程序执行的速度要比浏览器渲染的速度要快很多,那么就有可能出现这样一种情况,例如当使用自动化打开一个页面后需要选中这个页面中的一个元素,但是由于由于执行的太快,在页面还没有渲染出来的情况下(被选中的元素还没有出现),就选中这个元素,程序就会报错,为了解决这种情况,有四种等待方式来解决,下面我来讲解一下:
11.1、强制等待
强制等待就是通过线程阻塞来进行,也就是我们熟知的 Thread.sleep() ,这种方式在自动化中会用到,但是用的不是很多,为什么呢?每一个自动化方法就是一个测试用例,假设一个用例你设置2s的等待时间,那么100个测试用例就是100s,效率十分低下,而且很大概率,在我们设置的等待时间之内,页面就已经渲染出来了。
11.2、隐式等待
隐式等待作用于driver的整个生命周期,会在你设置的一个时间内,反复判断元素是否存在,直到元素被找到才停止等待(类似于自旋锁的自旋操作),若超出时间,就执行下一步;
例如,通过自动化 打开百度网址->输入"你好"->点击百度一下按钮->点击"你好——百度百科",整个过程隐式等待,如下代码:
private ChromeDriver driver = new ChromeDriver();public void test1() {//隐式等待——作用driver的整个生命周期,直到quit(设置时间为3秒)driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//打开百度网页driver.get("https://www.baidu.com");//在搜索框输入"你好" driver.findElement(By.cssSelector("#kw")).sendKeys("你好");//点击百度一下driver.findElement(By.cssSelector("#su")).click();//点击"你好-百度百科";driver.findElement(By.cssSelector("#\\31 > div > div > h3 > a")).click();//退出driver.quit();}
Ps:Duration这个类中的等待单位有很多种,可以是毫秒、秒、小时...如下:
11.3、显示等待
当等待的条件满足后(一般用来判断需要等待的元素是否加载出来),就继续下一步操作。等不到就一直等,如果在规定的时间之内都没找到,那么就跳出Exception,和隐式等待不同的是,显示等待一般作用某一条代码。
例如,通过自动化 打开百度网址 -> 输入"你好" -> 点击百度一下按钮 -> 显示等待"你好——百度百科"元素出现 -> 点击"你好——百度百科",如下代码:
private ChromeDriver driver = new ChromeDriver();public void test2() {//打开百度网页driver.get("https://www.baidu.com");//在搜索框输入"你好"driver.findElement(By.cssSelector("#kw")).sendKeys("你好");//点击百度一下driver.findElement(By.cssSelector("#su")).click();//显示等待 “你好——百度百科”元素出现new WebDriverWait(driver, Duration.ofSeconds(3)).until(driver->driver.findElement(By.cssSelector("#\\31 > div > div > h3 > a")));//退出driver.quit();}
Ps:until就表示等待的元素,也就是一直等待到xxx元素出现
12、浏览器导航
12.1、前进、后退、刷新
就是通过自动化控制如下三个按钮:

例如,打开百度 -> 输入"你好" -> 点击百度一下按钮 -> 后退到百度主页 -> 前进到"你好" -> 刷新当前网页 ,如下代码:
private ChromeDriver driver = new ChromeDriver();public void test3() {//打开百度driver.get("https://www.baidu.com/");//输入框输入"你好"driver.findElement(By.cssSelector("#kw")).sendKeys("你好");//点击“百度一下”按钮driver.findElement(By.cssSelector("#su")).click();//回退driver.navigate().back();//前进driver.navigate().forward();//刷新driver.navigate().refresh();driver.quit();}
13.弹窗
13.1、弹窗类型
共有以下三种弹窗

13.2、处理弹窗的步骤
a)将driver对象作用到弹窗上(切换到弹窗)
driver.switchTo.alert()
b)得到弹窗对象后,选择 确认/取消/输入文本(提示弹窗)
确认:accept();
取消:dismiss();
输入(提示弹窗):sendKeys();
注意:
1.提示弹窗输入文本,在页面上是看不到输入文本的执行效果。
2.虽然警告弹窗只有确认按钮,但是accept和dismiss都能处理。
3.虽然警告弹窗和确认弹窗都没有输入文本的地方,凡是如果要执行alert.sendKeys代码,也不会报错。
13.3、示例
a)出现提示弹窗,进行输入文本,并点击确认,如下代码:
//将driver作用对象切换到弹窗上Alert alert = driver.switchTo().alert();//输入文本alert.sendKeys("hello");//点击确认alert.accept();
b)出现确认弹窗,点击取消,如下代码:
//将driver作用对象切换到弹窗上Alert alert = driver.switchTo().alert();//点击取消alert.dismiss();
14、选择框
14.1、处理步骤
在Selenium执行自动化的过程中,我们知道,没法通过F12检查对选择框中的选项进行选择,实际上,可以通过以下三种方式进行选择:
- 根据文本来选择;
- 根据属性值来选择;
- 根据序号来选择(序号是从0开始的);
文本、属性值、序号又是什么呢?如下图:

注意:序号是从上往下,从0开始数。
14.2、示例
对一个选择框分别进行文本、属性、序号的选择,如下代码:
//得到选择框对象WebElement ele = driver.findElement(By.cssSelector("#ShippingMethod"));//创建选择框对象Select select = new Select(ele);//根据文本来进行选择select.selectByVisibleText("UPS Next Day Air ==> $12.51");//根据属性来进行选择select.selectByValue("12.51");//根据序号来进行选择select.selectByIndex(0);
15、执行脚本
实际上就是执行js代码
使用方法如下代码:
driver.executeScript();//参数是js代码
16、文件上传
16.1、使用方式
使用方式很简单,如下代码:
sendKeys("文件的绝对路径");
16.2、示例
如下场景:

例如我要上传D盘下的test.txt文件,代码如下:
//选择“上传文件按钮”WebElement ele = driver.findElement(By.cssSelector("body > div > div > input[type=file]"));//上传文件ele.sendKeys("D:\\test.txt");
执行效果如下:

Ps:注意上图中的test.txt文件,并不是直接上传到服务器了,而是把要上传的文件的绝对路径放在了这里;
17、浏览器参数设置
实际的工作中,测试人员将自动化部署在机器上自动执行,测试人员不会每次都一直盯着自动化执行的过程,而是直接查看自动化执行的结果。
ChromeDriver类提供了一个构造参数,可以实现以上场景,也叫做“无头模式”。
如下代码:
ChromeOptions options = new ChromeOptions();options.addArguments("-headless");ChromeDriver driver = new ChromeDriver(options);
Ps:浏览器的参数设置需要在创建浏览器对象之前。
结语
如果文章对你有帮助,

相关文章:
Selenium常用API详解,从入门到进阶(全套)
目录 1、打开页面 2、查找页面元素 3、输入文本 4、点击操作 5、提交操作 6、清除文本 7、获取文本、属性 8、获取页面的标题和URL 9、窗口 9.1、设置窗口大小 9.2、窗口切换 9.2.1、为什么需要窗口切换? 9.2.2、获取句柄的方式 9.2.3、切换句柄 10、…...
自从学会了Python,我实现了壁纸自由(6)
小朋友们好,大朋友们好!我是猫妹!哈哈哈,又到周末啦!这周过得怎么样?马上就要开学了,寒假作业早已写好了吧?开学让人兴奋,上了很久网课都要吐啦!开学也让人有…...
Ruby 发送邮件 - SMTP
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 Ruby提供了 Net::SMTP 来发送邮件,并提供了两个方法 new 和 start: new 方法有两个参数&am…...
Python爱心代码
前言 Python漂浮爱心,具体源码见:Python动态爱心代码_爱心代码-Python文档类资源-CSDN下载 爱心类 class Heart(): #每个爱心(爱心类) def __init__(self): self.r ra.randint(10,15) #爱心的半径 …...
【二分查找法及其应用】
文章目录一. 前提二. 基本思路三. 代码实现四. 封装在STL中的二分查找算法五. 浮点数二分一. 前提 待查找的序列是有序的;待查找的 a 采取顺序存储结构。 二. 基本思路 设在升序序列 a [ low…high ] 查找的 k , 首先找中间值 mid a [ ( lowhigh )/2 …...
Android 进阶——Framework核心 之Binder Java成员类详解(三)
文章大纲引言一、Binder Java家族核心成员关系图二、Binder Java家族核心成员源码概述1、android.os.IBinder1.1、boolean transact(int code, Parcel data, Parcel reply, int flags) send a call to an IBinder object1.2、String getInterfaceDescriptor()1.3、boolean ping…...
Maven
Maven 1.什么是Maven 官方网站 https://maven.apache.org/ Maven是一款服务于Java平台的自动化构建工具,它可以帮助我们更方便的对项目进行构建、管理项目jar包 ,包括: bulid 项目,切换 jar 版本,添加 jar, 删除 jar 包等 1.…...
1947抓住那头牛(队列 广度优先搜索)
目录 题目描述 解析 解题思路 代码部分 代码部分 运行结果 看看len数组中各个位置的标记值 为什么这样做一定是最短路径: 题目描述 农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<N<100000)&…...
基于linux5.15.5的IMX 参考手册 ---21
基于linux5.15.5的IMX 参考手册 — 21 10.5.2高清多媒体接口(HDMI)和显示端口(DP)概述 10.5.2.1测试名称 •mxc_cec_test.out 10.5.2.1.1位置 /unit_tests/HDMI/ 10.5.2.1.2功能 验证HDMI CEC功能并向HDMI接收器发送断电命令。 1…...
Android Dalvik虚拟机 堆初始化流程
前言 上篇文章介绍了dalvik虚拟机启动流程,在dalvik虚拟机启动时调用了dvmGcStartup来启动堆。 本文介绍我们在日常开发使用Java时的堆创建流程。 Dalvik堆介绍 Dalvik虚拟机中,堆是由heap[0] Active堆和heap[1] Zygote堆两部分组成的。其中ÿ…...
0讲(补)——开发前必备基本常识
前言 专栏内容持续补充更新,目前正在进行优惠活动 目录 前言 一、函数的声明和定义 二、预编译 三、串口打印中的printf函数的使用...
JS学习笔记
1.WebAPIs简介导读Web APIs 和JS 基础关联性JS 基础阶段以及 Web APIs 阶段JS基础学习 ECMAScript 基础语法为后面作铺垫,Web APIs 是JS 的应用,大量使用JS基础语法做交互效果①JS 基础阶段我们学习的是ECMAScript 标准规定的基本语法要求同学们掌握JS 基…...
linux005之用户、组管理
linux用户管理简介: 任何使用linux系统的用户,都必须使用一个合法的账号和密码,账号和密码一般都是超级管理员创建,当然普通用户也可以创建用户,前提是必须拥有创建用户权限。 root是linux系统中默认创建的超级用户 创…...
列线图工具_Nomogram
定义 列线图是一种相对传统的分析方法,用于展示自变量和因变量的线性关系,及其特征的重要程度。 现在用SHAP,和机器学习库中的 Feature importance 工具可以实现类似甚至更好效果。不过很多传统的研究领域比较认这种方法。 列线图工具建立在…...
【C++】类和对象(一)
目录一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1、访问限定符4.2、封装五、类的作用域六、类的实例化七、类对象的大小八、this指针8.1、this指针的引出8.2、this指针的特性8.3、C语言和C实现Stack的对比一、面向过程和面向对象初步认…...
Python获取搜索引擎结果
前言 想快速获取各个高校的博士招生网站,于是通过python先获取出有可能包含高校博士招生网站的URL,然后通过人为筛选得到了想要的招生网站(注意,并非直接爬取,是间接获取的)。 整理了一份网站名单&#x…...
2.4.8 PCIe——物理逻辑层——REFCLK
一、概述 pcie的参考时钟由板级输入,提供给IP内PHY层的PLL使用,由PLL产生core_clk和pipe_clk。 二、REFCLK产生方式 Serdes 所用时钟由 PHY 模块内的PLL生成,PLL的参考时钟可以由common clock(外部背板提供)、separ…...
树莓派4B arm64 搭建 docker+drone+gitea
树莓派4B arm64 搭建 dockerdronegitea 记录时间: 2023年02月10日 树莓派烧录 如何用树莓派搭建一台永久运行的个人服务器? https://mp.weixin.qq.com/s?__bizMzI5NjA0ODkwNA&mid2651847658&idx1&sn267a1257b43d4a76f2a081ed157b77f9&chksmf7b11…...
Java的JDBC编程
目录 1. 打开IDEA,新建Project 2. 引入依赖 (1)下载驱动包 (2)将驱动包导入Project 3. 编写代码 (1)创建数据源 (2)让代码和数据库服务器建立联系 (3&…...
CSS:块格式化上下文(BFC)
块格式化上下文是块级盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。 块格式化上下文(BFC)的创建 满足以下条件将创建块格式化上下文: 根元素()浮动元素(float 值不为 none)绝对定位元素…...
three粒子飘动效果
1、总结<template><div id"box"></div></template> <script setup> import * as three from three; import { onMounted } from vue; import { OrbitControls } from three/addons/controls/OrbitControls.js; import ring from "…...
年春节AI发展大事记
. GIF文件结构 相比于 WAV 文件的简单粗暴,GIF 的结构要精密得多,因为它天生是为了网络传输而设计的(包含了压缩机制)。 当我们用二进制视角观察 GIF 时,它是由一个个 数据块(Block) 组成的&…...
低资源濒危方言文本分类实战:从数据稀缺到96%准确率的Hawrami案例
1. 项目概述:当AI遇见濒危方言在自然语言处理(NLP)领域,我们常常谈论的是英语、中文这些资源丰富的“大语言”。但作为一名长期关注多语言技术和语言资源建设的从业者,我深知那些在数字世界中悄然失声的“小语言”和方…...
教育AI信任构建:透明度与可解释性如何破解多利益相关者困局
1. 项目概述:当AI走进课堂,我们到底在担心什么?最近和几位在一线教学的朋友聊天,发现一个挺有意思的现象:学校采购了一批据说能“智能批改作文”、“个性化推荐习题”的AI教学工具,但老师们用起来的积极性并…...
互联网大厂Java求职者面试:微服务与云原生的挑战
互联网大厂Java求职者面试:微服务与云原生的挑战 场景:在一家互联网大厂的面试中,面试官是一位严肃的技术专家,而候选人燕双非则是一位幽默风趣的程序员。面试官试图通过一系列问题了解燕双非对微服务和云原生的掌握程度。第一轮提…...
可解释AI在衰老时钟模型中的应用:从黑箱预测到生物标志物发现
1. 项目概述:当“黑箱”AI遇见衰老时钟在生物医学研究,尤其是衰老科学这个前沿领域,我们正面临一个既令人兴奋又充满挑战的局面。一方面,以深度学习为代表的复杂机器学习模型,凭借其强大的模式识别能力,正以…...
生成式AI如何重塑创意工作流:实验揭示的人机协作双刃剑效应
1. 项目概述:当AI成为你的“创意副驾驶”最近半年,我身边的设计师、文案、程序员朋友,几乎人手一个AI工具。从Midjourney出图到ChatGPT写方案,从Suno作曲到Runway做视频,大家聊天的开场白从“吃了没”变成了“你prompt…...
保姆级教程:用Python和Pandas快速上手Argoverse2数据集(附代码避坑指南)
保姆级教程:用Python和Pandas快速上手Argoverse2数据集(附代码避坑指南) Argoverse2作为自动驾驶领域的高质量开源数据集,正成为轨迹预测和场景理解研究的热门选择。但对于刚接触这个数据集的数据工程师或机器学习初学者来说&…...
2026届必备的六大降AI率网站横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下,AI论文工具于学术写作范畴正起着越来越关键的作用,成为学术写…...
CANN评测:SwiGlu算子API
SwiGlu 算子 API 描述 【免费下载链接】cann-bench 评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台&#x…...

