Selenium 自动化测试工具<2>(Selenium 常用API的使用方法)

文章目录

    • 浏览器操作
      • 浏览器最大化
      • 设置浏览器的大小
      • 浏览器的前进和后退
      • 操作浏览器滚动条
    • 键盘事件
      • 单个按键用法
      • 键盘组合键用法
    • 鼠标事件
    • 不同窗口搜索
    • 定位一组元素
    • 定位多层框架
    • 下拉框定位
    • alert、confirm、prompt 的处理
    • 上传文件操作
    • 自动截屏

继上一篇文章对 Selenium API 的使用,本篇文章将继续讲解剩下的一些主要的 API 的使用方法。

浏览器操作

浏览器最大化

需要使用到的 API:

  • manage()
  • window()
  • maximize()

场景:对浏览器进行最大化,然后获取到百度页面上的“换一换”按钮,并且获得文本

在这里插入图片描述

代码实现:

    private static void test9() {// 创建浏览器驱动WebDriver webDriver = new ChromeDriver();// 跳转百度页面webDriver.get("https://www.baidu.com/");//浏览器最大化webDriver.manage().window().maximize();//定位“换一换"按钮String text = webDriver.findElement(By.cssSelector("#hotsearch-refresh-btn > span")).getText();if(text != null) {System.out.println("测试通过,text:" + text);}else {System.out.println("测试未通过");}}

执行结果:

在这里插入图片描述

设置浏览器的大小

场景:将浏览器的大小设置成 200*400 的大小

涉及到的 API:

  • manage()
  • window()
  • setSize()

代码实现:

    private static void test10() {// 创建浏览器驱动WebDriver webDriver = new ChromeDriver();// 指定跳转页面webDriver.get("https://www.baidu.com/");// 设置浏览器大小webDriver.manage().window().setSize(new Dimension(200, 400));webDriver.quit();}

执行结果:

在这里插入图片描述

浏览器的前进和后退

场景1:在百度输入框中输入“张三”,点击百度一下按钮进行搜索,搜索出来之后,点击导航栏上的后退按钮,重新返回到百度的主页面

涉及到的API:

  • navigate()
  • back()
  • forwrd()

代码实现:

private static void test11() throws InterruptedException {// 创建浏览器驱动WebDriver webDriver = new ChromeDriver();// 指定跳转页面webDriver.get("https://www.baidu.com/");// 选择输入框,输入张三webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");// 选择百度一下并点击webDriver.findElement(By.cssSelector("#su")).click();System.out.println("当前页面的url:" + webDriver.getCurrentUrl());//进入新的页面,休眠3秒sleep(3000);//选择控制台上的后退按钮webDriver.navigate().back();//休眠三秒,后退之后,获取当前页面的urlsleep(3000);System.out.println("后退之后,当前页面的url:" + webDriver.getCurrentUrl());webDriver.quit();}

执行结果:

在这里插入图片描述

场景2: 场景1:在百度输入框中输入“张三”,点击百度一下按钮进行搜索,搜索出来之后,点击导航栏上的后退按钮,重新返回到百度的主页面,然后再点击前进按钮,重新回到刚才搜索到的张三页面。

代码实现:

private static void test12() throws InterruptedException {// 创建浏览器驱动WebDriver webDriver = new ChromeDriver();// 指定跳转页面webDriver.get("https://www.baidu.com/");// 选择输入框,输入张三webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");// 选择百度一下并点击webDriver.findElement(By.cssSelector("#su")).click();String currentUrl = webDriver.getCurrentUrl();System.out.println("搜索到张三的页面的url:" + currentUrl);//进入新的页面,休眠3秒sleep(3000);//选择控制台上的后退按钮webDriver.navigate().back();//休眠三秒,后退之后,获取当前页面的urlsleep(3000);System.out.println("后退之后,当前页面的url:" + webDriver.getCurrentUrl());//进行前进webDriver.navigate().forward();sleep(3000);// 获取到前进后的页面String currentUrl1 = webDriver.getCurrentUrl();System.out.println(currentUrl1);// 判断前进后的页面和第一次搜索到的页面是不是同一个,如果是,则测试通过,否则测试未通过if(currentUrl.equals(currentUrl1)) {System.out.println("测试通过");}else {System.out.println("测试未通过");}webDriver.quit();}

在这里插入图片描述

操作浏览器滚动条

浏览器滚动条的控制需要依靠 js 脚本,代码如下:

#将浏览器滚动条滑到最顶端document.documentElement.scrollTop=0
#将浏览器滚动条滑到最底端
document.documentElement.scrollTop=10000

涉及到的API:

  • executeScript()

Java代码实现操作:

private static void test13() throws InterruptedException {// 创建浏览器驱动WebDriver webDriver = new ChromeDriver();// 指定跳转页面webDriver.get("https://www.baidu.com/");// 选择输入框,输入张三webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");// 选择百度一下并点击webDriver.findElement(By.cssSelector("#su")).click();//休眠3秒,等待页面完成渲染sleep(3000);//将滚动条划到最下面String js_bottom = "document.documentElement.scrollTop=10000";((JavascriptExecutor)webDriver).executeScript(js_bottom);sleep(3000);//将滚动条移动到最上面String js_up = "document.documentElement.scrollTop=0";((JavascriptExecutor)webDriver).executeScript(js_up);sleep(3000);webDriver.quit();}

这里执行的结果,请自行演示。

键盘事件

单个按键用法

自动输入键盘上一些按键的用法,常见的如下:

  • webDriver.sendKeys(Keys.ENTER) 回车

  • webDriver.sendKeys((Keys.TAB) TAB

  • webDriver.sendKeys((Keys.SPACE) 空格键

  • webDriver.sendKeys((Keys.ESCAPE) 回退键

    这里的用法都一样,所以,下面只讲解一个回车键一个例子

private static void test14() throws InterruptedException {// 创建浏览器驱动WebDriver webDriver = new ChromeDriver();// 指定跳转页面webDriver.get("https://www.baidu.com/");// 选择输入框,输入张三webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");// 使用回车键搜索webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.ENTER);sleep(3000);// 获取当前页面的urlSystem.out.println(webDriver.getCurrentUrl());webDriver.quit();}

键盘组合键用法

  • webDriver.sendKeys(Keys.CONTROL, “A”) 全选(Ctrl+A)
  • webDriver.sendKeys(Keys.CONTROL,”C”) 复制(Ctrl+C)
  • webDriver.sendKeys(Keys.CONTROL,”X”) 剪贴(Ctrl+X)
  • webDriver.sendKeys(Keys.CONTROL,”V”) 粘贴(Ctrl+V)

代码实现:

private static void test15() throws InterruptedException {// 创建浏览器驱动WebDriver webDriver = new ChromeDriver();// 指定跳转页面webDriver.get("https://www.baidu.com/");// 选择输入框,输入张三webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");sleep(3000);//全选输入框中的文本,也就是张三 ctrl+AwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");sleep(3000);//剪切文本ctrl+XwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");sleep(3000);//粘贴文本ctrl+VwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");}

执行结果自行测试观察现象。

鼠标事件

鼠标的一些常用动作如下:

  • Action.contextClick()右击
  • Action.doubleclick() 双击
  • Action.dragAndDrop() 拖动
  • Action.moveToElement() 移动

场景:在搜索框中输入张三,点击回车键搜索,然后将鼠标移动到图片上,然后鼠标点击右键

在这里插入图片描述

代码实现:

private static void test16() throws InterruptedException {// 创建浏览器驱动WebDriver webDriver = new ChromeDriver();// 指定跳转页面webDriver.get("https://www.baidu.com/");// 选择输入框,输入张三webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");// 使用回车键搜索webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.ENTER);sleep(3000);// 创建一个Actions对象,生成用户行为。Actions action = new Actions(webDriver);// 通过CSS选择器定位图片元素,定义一个目标WebElement element = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));//moveToElement(element)是将鼠标移动到指定的目标上//contextClick()点击鼠标右键//perform()显示以上执行的动作action.moveToElement(element).contextClick().perform();}

请自行执行代码观察效果。

不同窗口搜索

场景:在百度搜索页面,点击新闻按钮,然后进入新闻页面,在新闻页面的搜索框中搜索乌克兰,进行页面跳转。

在这里插入图片描述

代码实现:

    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();// 进入到新闻页面,定位搜索框并输入“乌克兰”webDriver.findElement(By.cssSelector("#ww")).sendKeys("乌克兰");// 定位搜索按钮,并点击webDriver.findElement(By.cssSelector("#s_btn_wr")).click();webDriver.quit();}

执行结果:可以看到,结果最后报错了,并没有找到这样的元素,这是为什么呢?

在这里插入图片描述

异常原因:

可以看到,点击新闻后,又打开了一个新的窗口,但是,上述代码中,我们想要定位的是百度新闻页面的搜索框,从新闻页面中搜索乌克兰,而上述代码它还是在百度主页面查找元素,所以,它找不到这个搜索框,所以就会报错。

在这里插入图片描述

解决方法:

把当前浏览器中的所有窗口获取到,因为新的窗口都是在最后一个,所以获取到最后一个窗口信息,然后进入到新的窗口中,进行后续的操作即可。

涉及到的API:

  • webDriver.getWindowHandles()
  • webDriver.switchTo().window(target);
private static void test17() 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(3000);// webDriver.getWindowHandle(); 获取当前窗口信息// 获取浏览器中所有的窗口Set<String> windowHandles = webDriver.getWindowHandles();// 遍历所有窗口,定位最后一个窗口,也就是百度新闻的敞口String target = "";for(String win : windowHandles) {target = win;}// 进入百度新闻的窗口中webDriver.switchTo().window(target);sleep(3000);// 进入到新闻页面,定位搜索框并输入“乌克兰”webDriver.findElement(By.cssSelector("#ww")).sendKeys("乌克兰");// 定位搜索按钮,并点击webDriver.findElement(By.cssSelector("#s_btn_wr")).click();sleep(3000);webDriver.quit();}

定位一组元素

使用 findElement() 方法可以很方便的定位到某个特定的对象,但是,有的时候我们需要定位一组元素,这时候就需要使用 findElements() 方法了。

场景:批量操作对象,比如,将下图中所有的 checkbox 都勾上。

实现步骤:将这一组元素都获取到,然后进行筛选,将checkbox都进行点击。

在这里插入图片描述

前端页面代码:

<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>

代码实现:

private static void test18() throws InterruptedException {// 获取浏览器驱动WebDriver webDriver = new ChromeDriver();// 跳转页面webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test01.html");sleep(3000);// 通过css选择器中标签的方式,获取所有的input标签元素List<WebElement> input = webDriver.findElements(By.cssSelector("input"));// 遍历所有元素,对checkbox的元素进行点击for(WebElement ele : input) {String type = ele.getAttribute("type");if(type.equals("checkbox")) {//进行勾选ele.click();}}sleep(5000);webDriver.quit();}

定位多层框架

场景: 如下两张图,在frame框架中,还有一个inner框架,所以他是多层框架嵌套,现在,对inner框架中的click按钮进行点击。

在这里插入图片描述

在这里插入图片描述

前端页面代码:

<html>
<head><meta http-equiv="content-type" content="text/html;charset=utf-8" /><title>frame</title><linkhref="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstra
p-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>
<scriptsrc="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
</html>

代码实现:

思路:先一层一层的定位框架,例如,先定位到最外层框架,这里通过 id 属性来定位框架。,然后再定位里面的框架,之后再进行后续的点击操作即可

前端代码连接:

在这里插入图片描述

涉及到的API:

webDriver.switchTo().frame(); 定位框架

    private static void test19() throws InterruptedException {// 获取浏览器驱动WebDriver webDriver = new ChromeDriver();// 跳转页面webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test02_01.html");sleep(3000);// 定位下层框架webDriver.switchTo().frame("f1");// 定位click按钮并点击webDriver.findElement(By.cssSelector("body > div > div > a")).click();sleep(2000);}

下拉框定位

场景:如下图,有一个下拉框,现在要打开下拉框,然后选中里面的某个选项。例如选中图中的9.03

在这里插入图片描述

前端页面代码:

<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>

代码实现:

涉及到的API:

  • Select 对象
  • select.selectByIndex() 通过下标定位
  • select.selectByValue() 通过属性定位
private static void test20() throws InterruptedException {// 获取浏览器驱动WebDriver webDriver = new ChromeDriver();// 跳转页面webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test04.html");sleep(3000);// 选中下拉框WebElement element = webDriver.findElement(By.cssSelector("#ShippingMethod"));// 借助Select对象Select select = new Select(element);// 第一种方式// 通过下标定位到指定选项//select.selectByIndex(3);//下拉框中选项的下标从0开始//第二种方式// 通过value属性的值来确定指定的选项select.selectByValue("9.03");sleep(3000);webDriver.quit();}

alert、confirm、prompt 的处理

  • text() 方法 返回弹框,确认框,提示框中的文本信息
  • accept() 点击确认按钮
  • dismiss() 点击取消按钮,如果有的的话。
  • alert() 定位弹窗

场景:点击弹窗链接按钮,然后先获取弹窗中的信息,测试获取的信息和弹窗中的信息是否一致,接着向对话框中输入我爱你,然后在页面上显示。

在这里插入图片描述

前端页面代码:

<html>
<head><meta charset="UTF-8"><title></title><script type="text/javascript">function disp_prompt(){let name = prompt("Please enter your name", "");if (name!=null &&name!=""){document.write("Hello " +name + "!")}}</script>
</head>
<body>
<input type="button" onclick="disp_prompt()" value="请点击"/>
</body>
</html>
 private static void test21() throws InterruptedException {// 获取浏览器驱动WebDriver webDriver = new ChromeDriver();// 跳转页面webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test0502.html");//定位弹窗连接按钮,并点击webDriver.findElement(By.cssSelector("body > input[type=button]")).click();sleep(2000);//选择弹窗,并获取弹窗中的信息Alert alert = webDriver.switchTo().alert();System.out.println("弹窗中的信息:" + alert.getText());String info = "Please enter your name";if(alert.getText().equals(info)) {System.out.println("弹窗信息测试通过");}else {System.out.println("弹窗信息测试不通过");}//向弹窗的对话框中输入信息alert.sendKeys("我爱你");sleep(3000);//点击确认按钮alert.accept();
//        点击弹框中取消按钮
//        alert.dismiss();sleep(3000);//获取页面中的值String text = webDriver.findElement(By.cssSelector("body")).getText();String pageInfo = "Hello 我爱你!";if(text.equals(pageInfo)) {System.out.println("弹框信息测试成功: " + text);}else {System.out.println("弹框信息测试失败");}webDriver.quit();}

执行结果:

在这里插入图片描述

在这里插入图片描述

上传文件操作

在Selenium中的上传文件并没有那么复杂,只要定位到上传按钮,通过sendKeys添加本地文件路径即可,代码如下:

前端页面代码:

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>upload_file</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js">
</script>
<link
href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstra
p-combined.min.css" rel="stylesheet" />
<script type="text/javascript">
</script>
</head>
<body>
<div class="row-fluid">
<div class="span6 well">
<h3>upload_file</h3>
<input type="file" name="file" />
</div>
</div>
</body>
<script src="http://netdna.bootstrapcdn.com/twitterbootstrap/2.3.2/js/bootstrap.
min.js"></script>
</html>

代码实现:

    private static void test22() throws InterruptedException {// 获取浏览器驱动WebDriver webDriver = new ChromeDriver();//跳转页面webDriver.get("file:///D:/gitee/java-code-exercise/untitled5/src/main/resources/test08.html");sleep(3000);//定位上传文件按钮,并点击WebElement element = webDriver.findElement(By.cssSelector("body > div > div > input[type=file]"));//上传文件路径element.sendKeys("D:\\无标题.png");webDriver.quit();}

自动截屏

在自动测试的过程中,如果测试结果不符合我们的预期,就可以把这个测试结果的现象给截图下来,这样就不用一直的对这个错误复现,要是使用自动截图,需要引入以下依赖:

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.15.1</version>
</dependency>

场景:

在百度的页面输入张三,然后点击搜索,对搜索结果的页面进行截图。

在这里插入图片描述

代码实现:

    private static void test23() throws IOException, InterruptedException {// 获取浏览器驱动WebDriver webDriver = new ChromeDriver();// 跳转百度页面webDriver.get("https://www.baidu.com/");sleep(3000);// 定位搜索框,输入张三,点击百度一下webDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");webDriver.findElement(By.cssSelector("#su"));sleep(3000);// 截图File screenshotAs = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);// 将截图复制到指定的路径FileUtils.copyFile(screenshotAs, new File("d://搜索页面截图.pnj"));webDriver.quit();}

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

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

相关文章

RT-DRET在实时目标检测上超越YOLO8

导读 目标检测作为计算机视觉的核心任务之一&#xff0c;其研究已经从基于CNN的架构发展到基于Transformer的架构&#xff0c;如DETR&#xff0c;后者通过简化流程实现端到端检测&#xff0c;消除了手工设计的组件。尽管如此&#xff0c;DETR的高计算成本限制了其在实时目标检测…

搭建属于自己的 Git 仓库:GitLab

搭建属于自己的 Git 仓库&#xff1a;使用 GitLab 文章目录 搭建属于自己的 Git 仓库&#xff1a;使用 GitLab什么是 GitLab&#xff1f;准备工作安装 Docker使用Docker Compose 快速构建GitLab1、从docker compose快速搭建GitLab2、部署到服务器并访问3、浏览器访问 在现代软件…

【数据结构】------C语言实现二叉树

作者主页&#xff1a;作者主页 数据结构专栏&#xff1a;数据结构 创作时间 &#xff1a;2024年5月20日 一、二叉树的定义 二叉树(Binary Tree) 是由n个结点构成的有限集(n≥0)&#xff0c;n0时为空树&#xff0c;n>0时为非空树。 对于非空树&#xff1a; 有且仅有一个根…

腾讯Java社招面试题真题,最新面试题

Java中synchronized和ReentrantLock有什么区别&#xff1f; 1、锁的实现方式不同&#xff1a; synchronized是JVM层面的锁&#xff0c;主要依赖于监视器对象&#xff08;monitor&#xff09;实现。ReentrantLock是JDK层面的锁&#xff0c;通过Java代码实现&#xff0c;提供了更…

语雀——云知识库/笔记

对于日常进行学习/创作或是记录学习、工作内容与心得的群体来说&#xff0c;能够及时同步的云笔记应用有着广泛的应用场景。近期&#xff0c;我也探索了许多款不同的软件应用&#xff0c;今天来分享一款很有特点的应用——语雀。 语雀&#xff0c;为每一个人提供优秀的文档和知…

1.6 什么是程序-编译与调试

目录 1 程序的作用 2 新建项目及编译运行 2.1 新建项目 2.2 HelloWorld 程序说明 2.3 printf 打印输出 2.4 注释 3 程序的编译过程及项目位置 4 断点及调试窗口设置 5 学习C语言后的境界 1 程序的作用 如下图所示&#xff0c;我们编写了一个可以做加法的程序&#xf…

vue3 vite项目配置了proxy代理情况下查看真实的接口调用地址

vite配置了proxy代理情况下如何查看真实的接口调用地址? 使用vite进行代理 在vite.config.ts配置了代理 在浏览器查看请求头和响应头发现只有代理前的url&#xff0c;没有显示代理后的路径 然后发现一个bypass函数&#xff0c;但是此函数只能修改res响应头的数据&#xff0…

Dockerfile文件详细介绍

前言 Dockerfile是一个文本文件&#xff0c;包含了用于构建Docker镜像的所有命令和说明。它定义了容器的运行环境、依赖以及启动方式&#xff0c;是创建Docker镜像的核心部分。 由于制作镜像的过程中&#xff0c;需要逐层处理和打包&#xff0c;比较复杂&#xff0c;所以Docke…

实战复盘:内网环境渗透ms-SQL数据库

渗透环境&#xff1a;如下图所示&#xff0c;web服务器、ms-SQL服务器、PC客户端在同一个网络中&#xff0c;彼此之间&#xff0c;没有路由器或防火墙的隔离&#xff0c;这是一种危险的网络结构&#xff0c;入侵ms-SQL服务器&#xff0c;非常容易。&#xff08;实战中&#xff…

整理了10个靠谱且热门的赚钱软件,适合普通人长期做的赚钱副业

作为一名普通的上班族&#xff0c;我们每天都在辛勤工作&#xff0c;但工资的增长速度却如同蜗牛般缓慢。不过&#xff0c;别担心&#xff0c;信息时代总是带给我们无尽的惊喜&#xff01;今天&#xff0c;我将为大家推荐一些赚钱的宝藏软件&#xff0c;让你在闲暇之余轻松实现…

IEDA常用快捷键(后续更新ing)

1. 快速生成语句 1.快速生成main()方法 psvm或者main回车 2.快速生成输出语句 sout,回车 3.快速生成for循环 fori或者itar,回车 2.快捷键 含义操作查找文本CtrlF替换文本CtrlR单行注释Ctrl/多行注释CtrlShift/格式化CtrlAltL复制当前内容至下一行CtrlD补全代码Alt/快速生成…

C# 机构仿真实例

1、实现连杆带动滑块运动 一个连杆旋转带动另一个连杆&#xff0c;另一个连杆拖动滑块&#xff0c;点击“开始”按钮开始运动&#xff0c;再点击按钮&#xff0c;则停止运动。 2、实现程序 #region 机构仿真Image image null;Timer timer new Timer();int width 0;int heig…

一千题,No.0027(Phone Desktop)

描述 Little Rosie has a phone with a desktop (or launcher, as it is also called). The desktop can consist of several screens. Each screen is represented as a grid of size 53, i.e., five rows and three columns. There are x applications with an icon size o…

【网络安全】社会工程学攻击与防范

一、社会工程学概述 1、社会工程学的定义 通过利用人们的心理弱点、本能反应、好奇心、信任、贪婪等一些心理陷阱进行的诸如欺骗、伤害、信息盗取、利益谋取等对社会及人类带来危害的行为或方法。 当网络恶意攻击者无法通过纯粹的计算机技术达到目的时&#xff0c;高超的情商…

9.Redis之list类型

list相当于链表、数据表 1.list类型基本介绍 列表中的元素是有序的"有序"的含义,要根据上下文区分~~有的时候,谈到有序,指的是"升序","降序”有的时候,谈到的有序,指的是, 顺序很关键~~如果把元素位置颠倒,顺序调换.此时得到的新的 List 和之前的 Li…

新闻稿海外媒体投稿,除了美联社发稿(AP)和彭博社宣发(Bloomberg),还有哪些优质的国外媒体平台可以选择

发布高质量的新闻稿到海外媒体&#xff0c;除了美联社发稿&#xff08;AP&#xff09;和彭博社发稿&#xff08;Bloomberg&#xff09;&#xff0c;还有许多其他优质的媒体平台可以选择。以下是一些受欢迎和高效的海外媒体发布平台&#xff1a; 路透社 (Reuters) 路透社是全球最…

IIC通信(STM32)

一、IIC概念 &#xff11;、两根通信线&#xff1a;SCL&#xff08;Serial Clock&#xff09;、SDA&#xff08;Serial Data&#xff09; 同步&#xff0c;半双工 2、带数据应答 3、支持总线挂载多设备&#xff08;一主多从、多主多从&#xff09;一般使用一主多从。一主多从的…

【深度学习】paddlets,时序数据预测

文章目录 一、环境二、题目1三、题目2四、题目3五、函数参数 资料&#xff1a; https://paddlets.readthedocs.io/zh-cn/latest/source/api/paddlets.models.base.html#paddlets.models.base.BaseModel.recursive_predict https://aistudio.baidu.com/projectdetail/5866171?…

陪跑真正值钱的不是教程,是你遇到那个挡住你的问题时,身边有个靠谱的人

今天分享两个概念&#xff0c;一个是意识决定一切&#xff0c;一个是大道至简&#xff0c;做项目就是按部就班的遵循事情发展规律去做。 先说第一个概念&#xff0c;意识决定一切。我们说的凡事预则立不预则废&#xff0c;就是计划了去做就会有结果。 给你们一个表&#xff0c;…

MySQL——索引与事务

目录 前言 一、索引 1.索引概述 &#xff08;1&#xff09;基本概念 &#xff08;2&#xff09;索引作用 &#xff08;3&#xff09;索引特点 &#xff08;4&#xff09;适用场景 2.索引的操作 &#xff08;1&#xff09;查看索引 &#xff08;2&#xff09;创建索引…