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)绝对定位元素…...
paddle表情识别部署
表情识别模块1.环境部署1.1同样采用fastDeploy库1.2相关模型2.封装成静态库2.1参考[百度Paddle中PP-Mattingv2的部署并将之封装并调用一个C静态库](https://blog.csdn.net/weixin_43564060/article/details/128882099)2.2项目依赖添加2.3生成成功3.test3.1创建emotion_test项目…...
Python-第五天 Python函数
Python-第五天 Python函数一、函数介绍1. 什么事函数二、函数的定义1.函数的定义:2.案例三、函数的参数1.函数的传入参数2.案例升级四、函数的返回值1.什么是返回值2.返回值的语法3.None类型4.None类型的应用场景五、函数说明文档1.函数的说明文档2.在PyCharm中查看…...
【Python学习笔记】28.Python3 错误和异常
前言 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍。 Python3 错误和异常 Python 有两种错误很容易辨认:语法错误和异常。 Python assert…...
SQLServer 迁移到 MySQL 工具对比
我之所以会写这篇对比文章,是因为公司新产品研发真实经历过这个痛苦过程(传统基于 SQL Server开发的C/S 产品转为 MySQL云产品)。首次需要数据转换是测试环节,当时为了快速验证新研发云产品性能与结果准确性(算法类&am…...
分析finebi5.x仪表板组件获取数据过程(数据是数据集或者sql的)
首先仪表板的公共连接类似:http://localhost:37799/webroot/decision/link/Bo6B 当我们访问这个连接时,会来到FineLinkAction的getShareReport方法。 public String getShareReport(HttpServletRequest req, HttpServletResponse res, @FinePathVariable("linkId"…...
设计模式--适配器模式 Adapter Pattern
设计模式--适配器模式 Adapter Pattern适配器模式 Adapter Pattern1.1 基本介绍1.2 工作原理类适配器模式对象适配器模式接口适配器模式小结适配器模式 Adapter Pattern 1.1 基本介绍 (1)适配器模式将某个类的接口转换成为客户端期望的另一个接口表示&…...
PVE虚拟机篇-rest api
rest api官方介绍 Proxmox VE API rest api文档 rest api文档 rest api token 调用pve rest api ,有两种认证方式 Ticket Cookie Ticket Cookie的方式是最为推荐的,获取的方式为,通过post请求,发送用户名和密码到pve的server端获取tok…...
2022-2025学年面向中小学生的白名单全国性竞赛活动清单及官网地址链接
**资料来源:爬虫爬取。** 教育部办公厅 工业和信息化部办公厅关于公布 首批特色化示范性软件学院名单的通知 教育部办公厅 工业和信息化部办公厅关于公布首批特色化示范性软件学院名单的通知 - 中华人民共和国教育部政府门户网站 教育部办公厅关于2022-2025学年面向中小学生…...
Python 高级编程之生成器与协程进阶(五)
文章目录一、概述二、生成器1)生成器和迭代器的区别2)生成器创建方式1、通过生成器函数创建2、通过生成器表达式创建3)生成器表达式4)yield关键字5)生成器函数6)return 和 yield 异同7)yield的使…...
Django框架之视图和URL
视图和URL 站点管理页面做好了, 接下来就要做公共访问的页面了.对于Django的设计框架MVT. 用户在URL中请求的是视图.视图接收请求后进行处理.并将处理的结果返回给请求者.使用视图时需要进行两步操作 1.定义视图2.配置URLconf 1. 定义视图 视图就是一个Python函数,…...
厦门找一家做网站的公司好/网站自然优化
2019独角兽企业重金招聘Python工程师标准>>> 当下,企业越来越多地受到竞争对手和他们自己的客户的压力,既需要让应用程序更快地在线运行,同时又要最大限度地降低开发成本。这些不同的目标,迫使企业IT组织必须一刻不停地…...
上海装修做网站的倒闭了/推广类软文案例
现在股市红火,打工挣钱就是难啊,人家史玉柱倒腾点银行股,5亿变22亿!呵呵,有空炒股、买基金可能比研究.net更让人激动。 转载于:https://www.cnblogs.com/midea0978/archive/2007/01/22/626556.html...
东莞食品网站建设/企业的互联网推广
今天在一台被监控的主机上写了一个用户参数(UserParameter),用于监控这台主机上的一个pid,还有一些别的用户参数,其他的用户参数都正确获得了,唯独这个后加的pid始终没有获得到数据,服务和日志都…...
网站开发后台一般用什么/如何在百度免费发布广告
1.Python简介 python的创始人为吉多范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。Python崇尚优美、清晰、简单&#…...
多级子分类 wordpress/google seo怎么优化
释放双眼,带上耳机,听听看~!今天实在没有什么可以讲的,在网上搜素了很多资料,也没有找到合适的内容。于是只有讲这个很简单的内容,毕竟自己还是想保持写博客的习惯。第一种实现的代码:TextView …...
武汉做网站哪里好/网页模板图片
利用正则表达式来判断邮箱格式是否合法 具体解析可以看代码注释部分。 public class CheckMailUtil {public static boolean checkMail(String email){//邮箱的基本格式为“名称域名”//名称部分只允许英文字母、数字、下划线、英文句号、中划线和汉字组成//字母和数字表示为A…...