selenium自动化测试工具

Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。

查看chrome版本,114.05735.199

 去 http://chromedriver.storage.googleapis.com/index.html 网站下载对应版本的驱动

 

禁止Chrome自动更新

服务:Goggle更新服务改为禁用

 google浏览器图标右键,属性,目标栏后添加:--disable-background-networking

 

Selenium常用API--Java语言

环境配置、浏览器驱动、selenium元素定位、浏览器操作、模拟鼠标/键盘操作、获取断言信息、设置元素等待、定位一组元素、多表单切换、多窗口切换、浏览器cookie操作、调用JavaScript代码、获取窗口截图等。

maven依赖

        <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId>
<!--            目前来说就3.141.59这个版本好使高版本会有问题--><version>3.141.59</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>22.0</version></dependency>

工具类

ChromeDriverUtil.java

package com.selenium.auto.seleniumjava.util;import lombok.SneakyThrows;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;import java.io.File;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;public class ChromeDriverUtil {//文件版本,防止多线程缓存文件和用户文件共享,导致创建错误private static AtomicInteger fileSerial = new AtomicInteger(0);private ChromeDriver driver;public ChromeDriverUtil(String path, boolean pd, boolean img) {init(path, pd, img);}@SneakyThrowsprivate void init(String path, boolean pd, boolean img) {System.setProperty("webdriver.chrome.driver", path);ChromeOptions options = new ChromeOptions();if (!pd) {options.addArguments("--headless"); //无浏览器模式}options.addArguments("--disable-gpu"); // 谷歌文档提到需要加上这个属性来规避bugoptions.addArguments("--disable-software-rasterizer"); //禁用3D软件光栅化器options.addArguments("--no-sandbox");// 为了让linux root用户也能执行// 优化参数options.addArguments("--disable-dev-shm-usage"); //解决在某些VM环境中,/dev/shm分区太小,导致Chrome失败或崩溃if (img) {options.addArguments("blink-settings=imagesEnabled=false"); //禁止加图片,如果爬取图片的话,这个不能禁用options.addArguments("--disable-images");}String tmpdir = System.getProperty("java.io.tmpdir");String dir = tmpdir + File.separator + "chrome_file_data_cache" + File.separator + fileSerial.incrementAndGet();File file1 = new File(dir + File.separator + "data");if (file1.exists()) {file1.mkdirs();}File file2 = new File(dir + File.separator + "cache");if (file2.exists()) {file1.mkdirs();}options.addArguments("--user-data-dir=" + file1.getAbsolutePath()); //解决打开页面出现data;空白页面情况,因为没有缓存目录options.addArguments("--disk-cache-dir=" + file2.getAbsolutePath()); //指定Cache路径options.addArguments("--incognito"); //无痕模式options.addArguments("--disable-plugins"); //禁用插件,加快速度options.addArguments("--disable-extensions"); //禁用扩展options.addArguments("--disable-popup-blocking"); //关闭弹窗拦截options.addArguments("--ignore-certificate-errors"); //  禁现窗口最大化options.addArguments("--allow-running-insecure-content");  //关闭https提示 32位options.addArguments("--disable-infobars");  //禁用浏览器正在被自动化程序控制的提示  ,但是高版本不生效if (!pd) {//无浏览器模式-最大化窗口  ,防止有些元素被隐藏int screenWidth = ((int) java.awt.Toolkit.getDefaultToolkit().getScreenSize().width);int screenHeight = ((int) java.awt.Toolkit.getDefaultToolkit().getScreenSize().height);options.addArguments("window-size=" + screenWidth + "," + screenHeight);}//随机设置请求头options.addArguments("--user-agent=" + UserAgent.getUserAgentWindows());proxy(options, false); //设置代理 ,true 开启代理driver = new ChromeDriver(options);//实例化if (pd) {driver.manage().window().maximize(); //界面的方式, 最大化窗口, 防止有些元素被隐藏,无界面就不要使用了}//当我们去定位页面元素时,如果元素没有找到,不会立即抛出异常,而是周期性地(通常为 0.5s)去重新寻找,直到该元素找到或者超过最大等待时间才结束 ,超时后就报错NoTouchElementException//当我们使用implicitly_wait()时,如果想要定位的元素已经找到,但是它的内容(如文本内容,属性等)没有加载出来,此时隐式等待无效,仍会直接抛出NoSuchElementException异常,这也是为什么我们很多时候仍需要使用time.sleep()的原因。driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);}//无头模式,不加载图片public static ChromeDriverUtil buildHide(String path) {return new ChromeDriverUtil(path, false, true);}//无头模式,加载图片public static ChromeDriverUtil buildHideImg(String path) {return new ChromeDriverUtil(path, false, false);}//显示游览器 ,全功能public static ChromeDriverUtil build(String path) {return new ChromeDriverUtil(path, true, false);}public ChromeDriver getDriver() {return driver;}//强制等待 代码在执行到某个位置时强制等待一段时间@SneakyThrowspublic void sleep(long ms) {Thread.sleep(ms);}// 显示等待,是为了解决隐式等待遗留的问题,比如元素显示了,但是内部的文本没有显示出来,可能文本是通过ajax异步的会比较慢public WebElement wait(int seconds, ExpectedCondition<WebElement> expectedCondition) {WebDriverWait webDriverWait = new WebDriverWait(driver, seconds);//返回null或者false,等待500毫秒继续尝试,直到过期WebElement until = webDriverWait.until(expectedCondition);return until;}//自行扩展, 从接口中读取,或者从文件中读取都行private void proxy(ChromeOptions options, boolean pd) {if (pd) {String prox = "101.200.127.149:" + 3129;Proxy p = new Proxy();p.setHttpProxy(prox);//http
//        p.setFtpProxy(prox); //ftp
//        p.setSslProxy(prox);//ssl
//        p.setSocksProxy(prox); //SOCKS
//        p.setSocksUsername("");
//        p.setSocksPassword("");options.setProxy(p);}}}

 UserAgent.java

package com.selenium.auto.seleniumjava.util;import com.google.common.base.Charsets;
import com.google.common.io.Files;
import com.google.common.io.Resources;import java.io.File;
import java.net.URL;
import java.util.Collections;
import java.util.List;public class UserAgent {private static List<String> userAgentsWindows = null;static {URL url = Resources.getResource("userAgents_windows");if(url != null) {File file = new File(url.getPath());try {userAgentsWindows = Files.readLines(file, Charsets.UTF_8);} catch(Exception ex) {}}}public static String getUserAgentWindows() {if(userAgentsWindows == null || userAgentsWindows.size() == 0) {return "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36";}Collections.shuffle(userAgentsWindows);return userAgentsWindows.get(0);}
}

 在resources下新建文件userAgents_windows,内容如下:

Mozilla/5.0 (Windows; U; Windows NT 10.0) AppleWebKit/535.11.3 (KHTML, like Gecko) Version/4.0 Safari/535.11.3
Mozilla/5.0 (compatible; MSIE 5.0; Windows NT 6.0; Trident/3.1)
Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 6.1; Trident/4.0)
Mozilla/5.0 (Windows; U; Windows 98) AppleWebKit/534.49.4 (KHTML, like Gecko) Version/4.0.3 Safari/534.49.4
Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 10.0; Trident/3.1)
Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/3.1)
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/24.0.860.0 Safari/535.2
Mozilla/5.0 (Windows CE; mt-MT; rv:1.9.2.20) Gecko/2013-04-30 01:12:55 Firefox/3.8
Mozilla/5.0 (Windows; U; Windows CE) AppleWebKit/533.14.1 (KHTML, like Gecko) Version/5.0.1 Safari/533.14.1
Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.01; Trident/5.0)
Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 6.2; Trident/4.1)
Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 10.0; Trident/5.1)
Mozilla/5.0 (Windows NT 5.2; kok-IN; rv:1.9.2.20) Gecko/2011-09-17 16:05:22 Firefox/3.8
Opera/9.36.(Windows NT 6.1; gd-GB) Presto/2.9.178 Version/11.00
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/3.0)
Mozilla/5.0 (Windows NT 6.1; tl-PH; rv:1.9.1.20) Gecko/2017-02-01 17:55:13 Firefox/3.6.14
Mozilla/5.0 (compatible; MSIE 6.0; Windows 98; Trident/5.0)
Mozilla/5.0 (compatible; MSIE 7.0; Windows CE; Trident/3.1)
Mozilla/5.0 (Windows; U; Windows NT 6.1) AppleWebKit/535.41.7 (KHTML, like Gecko) Version/5.0.1 Safari/535.41.7
Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 6.2; Trident/3.0)
Mozilla/5.0 (Windows NT 6.2) AppleWebKit/533.0 (KHTML, like Gecko) Chrome/57.0.812.0 Safari/533.0
Opera/9.85.(Windows NT 5.2; kk-KZ) Presto/2.9.172 Version/12.00
Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.2; Trident/3.1)
Mozilla/5.0 (Windows; U; Windows 95) AppleWebKit/535.8.1 (KHTML, like Gecko) Version/4.0.1 Safari/535.8.1
Opera/9.39.(Windows 98; Win 9x 4.90; cmn-TW) Presto/2.9.189 Version/10.00
Mozilla/5.0 (Windows NT 4.0) AppleWebKit/531.2 (KHTML, like Gecko) Chrome/14.0.876.0 Safari/531.2
Mozilla/5.0 (Windows; U; Windows NT 4.0) AppleWebKit/531.4.5 (KHTML, like Gecko) Version/5.0.3 Safari/531.4.5
Opera/9.18.(Windows 98; Win 9x 4.90; aa-ER) Presto/2.9.166 Version/12.00
Mozilla/5.0 (Windows 95; ml-IN; rv:1.9.2.20) Gecko/2018-05-02 05:15:13 Firefox/3.8
Opera/9.52.(Windows NT 5.1; mhr-RU) Presto/2.9.160 Version/10.00
Mozilla/5.0 (compatible; MSIE 8.0; Windows CE; Trident/5.0)
Mozilla/5.0 (Windows NT 5.1; nan-TW; rv:1.9.1.20) Gecko/2020-02-12 23:57:29 Firefox/6.0
Mozilla/5.0 (Windows NT 4.0; cv-RU; rv:1.9.1.20) Gecko/2016-08-13 23:30:24 Firefox/3.8
Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 4.0; Trident/5.1)
Opera/9.34.(Windows NT 6.1; szl-PL) Presto/2.9.182 Version/12.00
Mozilla/5.0 (compatible; MSIE 7.0; Windows 98; Win 9x 4.90; Trident/4.0)
Opera/8.35.(Windows NT 5.0; az-AZ) Presto/2.9.171 Version/12.00
Opera/9.85.(Windows 98; sr-RS) Presto/2.9.167 Version/10.00
Mozilla/5.0 (Windows NT 5.1; ru-UA; rv:1.9.0.20) Gecko/2011-12-14 02:08:36 Firefox/3.8
Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/3.0)
Mozilla/5.0 (Windows NT 4.0) AppleWebKit/536.2 (KHTML, like Gecko) Chrome/28.0.862.0 Safari/536.2
Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 6.0; Trident/5.1)
Opera/9.50.(Windows NT 5.0; mk-MK) Presto/2.9.161 Version/11.00
Mozilla/5.0 (compatible; MSIE 5.0; Windows NT 6.0; Trident/5.1)
Opera/8.41.(Windows NT 5.01; az-IN) Presto/2.9.177 Version/11.00
Mozilla/5.0 (compatible; MSIE 8.0; Windows 98; Trident/3.0)
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 4.0; Trident/4.1)
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; Trident/4.0)
Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.1)
Mozilla/5.0 (Windows; U; Windows 98) AppleWebKit/531.36.3 (KHTML, like Gecko) Version/4.0.3 Safari/531.36.3
Mozilla/5.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; Trident/4.0)
Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)
Mozilla/5.0 (compatible; MSIE 8.0; Windows 98; Trident/4.1)
Mozilla/5.0 (Windows NT 4.0) AppleWebKit/536.2 (KHTML, like Gecko) Chrome/39.0.826.0 Safari/536.2
Mozilla/5.0 (Windows; U; Windows CE) AppleWebKit/533.1.3 (KHTML, like Gecko) Version/4.0.2 Safari/533.1.3
Mozilla/5.0 (compatible; MSIE 5.0; Windows NT 5.1; Trident/5.1)
Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/5.1)
Mozilla/5.0 (Windows; U; Windows 95) AppleWebKit/531.4.2 (KHTML, like Gecko) Version/5.1 Safari/531.4.2
Mozilla/5.0 (Windows NT 5.01; tr-CY; rv:1.9.2.20) Gecko/2013-09-06 07:39:53 Firefox/9.0
Mozilla/5.0 (Windows; U; Windows NT 4.0) AppleWebKit/535.22.1 (KHTML, like Gecko) Version/5.0 Safari/535.22.1
Mozilla/5.0 (Windows; U; Windows NT 5.0) AppleWebKit/535.37.3 (KHTML, like Gecko) Version/4.1 Safari/535.37.3
Opera/8.64.(Windows NT 5.1; yue-HK) Presto/2.9.182 Version/10.00
Opera/8.27.(Windows NT 6.1; bo-CN) Presto/2.9.180 Version/12.00
Opera/9.82.(Windows NT 5.01; lij-IT) Presto/2.9.185 Version/12.00
Opera/8.12.(Windows CE; ne-NP) Presto/2.9.160 Version/12.00
Opera/8.55.(Windows NT 5.1; it-CH) Presto/2.9.171 Version/10.00
Mozilla/5.0 (Windows; U; Windows NT 5.0) AppleWebKit/532.45.4 (KHTML, like Gecko) Version/4.0.2 Safari/532.45.4
Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)
Mozilla/5.0 (Windows; U; Windows 98; Win 9x 4.90) AppleWebKit/532.32.3 (KHTML, like Gecko) Version/4.0 Safari/532.32.3
Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.0; Trident/5.1)
Opera/9.26.(Windows CE; af-ZA) Presto/2.9.172 Version/10.00
Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 6.1; Trident/5.1)
Mozilla/5.0 (compatible; MSIE 7.0; Windows 98; Win 9x 4.90; Trident/5.0)
Mozilla/5.0 (Windows NT 5.1; or-IN; rv:1.9.0.20) Gecko/2012-05-22 18:16:14 Firefox/3.8
Mozilla/5.0 (Windows; U; Windows NT 6.2) AppleWebKit/533.29.5 (KHTML, like Gecko) Version/5.0.5 Safari/533.29.5
Opera/9.93.(Windows 98; ka-GE) Presto/2.9.184 Version/12.00
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/531.2 (KHTML, like Gecko) Chrome/29.0.812.0 Safari/531.2
Mozilla/5.0 (Windows; U; Windows CE) AppleWebKit/533.43.7 (KHTML, like Gecko) Version/5.1 Safari/533.43.7
Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/5.1)
Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/3.0)
Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/3.1)
Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.01; Trident/5.0)
Opera/9.75.(Windows NT 5.01; as-IN) Presto/2.9.180 Version/11.00
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 5.0; Trident/3.1)
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)
Mozilla/5.0 (Windows NT 5.0) AppleWebKit/536.2 (KHTML, like Gecko) Chrome/24.0.826.0 Safari/536.2
Mozilla/5.0 (Windows 95; nb-NO; rv:1.9.1.20) Gecko/2013-09-05 15:16:44 Firefox/11.0
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.2 (KHTML, like Gecko) Chrome/52.0.861.0 Safari/536.2
Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 10.0; Trident/3.0)
Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident/4.0)
Mozilla/5.0 (compatible; MSIE 5.0; Windows 98; Win 9x 4.90; Trident/3.0)
Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/3.0)
Mozilla/5.0 (Windows; U; Windows NT 6.2) AppleWebKit/533.35.5 (KHTML, like Gecko) Version/5.0 Safari/533.35.5
Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.1)
Mozilla/5.0 (Windows 98; Win 9x 4.90) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/60.0.830.0 Safari/532.2
Opera/8.23.(Windows NT 5.2; byn-ER) Presto/2.9.189 Version/11.00
Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident/5.1)
Opera/9.93.(Windows NT 5.1; az-AZ) Presto/2.9.173 Version/10.00
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/52.0.845.0 Safari/535.1
Mozilla/5.0 (compatible; MSIE 8.0; Windows 95; Trident/3.1)

使用:

        //驱动位置String path = "D:\\selenium\\chromedriver_win32\\chromedriver.exe";ChromeDriverUtil util = ChromeDriverUtil.build(path);ChromeDriver driver = util.getDriver();driver.navigate().to("https://www.baidu.com");

验证浏览器驱动

WebDriver driver = new ChromeDriver(); //Chrome浏览器

WebDriver driver = new FirefoxDriver(); //Firefox浏览器

WebDriver driver = new EdgeDriver(); //Edge浏览器

WebDriver driver = new InternetExplorerDriver(); // Internet Explorer浏览器

WebDriver driver = new OperaDriver(); //Opera浏览器

WebDriver driver = new PhantomJSDriver(); //PhantomJS

Selenium八种定位方式

  • findElement(By.id())
  • findElement(By.name())
  • findElement(By.className())
  • findElement(By.tagName())
  • findElement(By.linkText())
  • findElement(By.partialLinkText())
  • findElement(By.xpath())
  • findElement(By.cssSelector())

控制浏览器

driver.navigate.refresh(); //刷新

driver.navigate.forward(); //后退

driver.navigate.back(); //前进

driver.manage().window().maximize(); //浏览器最大化

driver.manage().window().setSize(new Dimension(480,800));

1.WebDriver 常用方法

  • clear() 清除文本。
  • sendKeys(*value) 模拟按键输入。
  • click() 单击元素

sendKeys()方法模拟键盘向输入框里输入内容。 但是它的作用不仅于此, 我们还可以用它发送键盘按键, 甚至用它来指定上传的文件。
click()方法可以用来单击一个元素,前提是它是可以被单击的对象,它与 sendKeys()方法是Web页面操作中最常用到的两个方法。 其实click()方法不仅仅用于单击一个按钮,它还可以单击任何可以单击的文字/图片链接、复选框、单选框、下拉框等。

2.其它常用方法

  • submit()  //提交表单
  • getSize() 返回元素的尺寸。
  • getText() 获取元素的文本。
  • getAttribute(name) 获得属性值。
  • isDisplayed() 设置该元素是否用户可见。

(八)模拟鼠标操作

  • contextClick() 右击
  • clickAndHold() 鼠标点击并控制
  • doubleClick() 双击
  • dragAndDrop() 拖动
  • release() 释放鼠标
  • perform() 执行所有Actions中存储的行为

(九)模拟键盘操作

Keys()类提供了键盘上几乎所有按键的方法。 前面了解到, sendKeys()方法可以用来模拟键盘输入, 除此之 外, 我们还可以用它来输入键盘上的按键, 甚至是组合键, 如 Ctrl+A、 Ctrl+C 等。

WebElement input = driver.findElement(By.id("kw"));

input.sendkeys(Keys.CONTROL,"a"); //复制

input.sendkeys(Keys.CONTROL,"x"); //剪切

input.sendkeys(Keys.CONTROL,"v"); //粘贴

(十)获取断言信息

不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较。这个比较的称之为断言。
我们通常可以通过获取title 、URL和text等信息进行断言。text方法在前面已经讲过,它用于获取标签对之间的文本信息。

  • getTitle(): 用于获得当前页面的title。
  • getCurrentUrl() : 用户获得当前页面的URL。
  • getText() 获取页面文本信息。

(十二)定位一组元素

与定位单个元素类似,findElement后面多加了个s

(十八)浏览器cookie操作

  • getCookies() 获得所有 cookie 信息。
  • getCookieNamed(String name) 返回字典的key为“name”的Cookie信息。
  • addCookie(cookie dict) 添加Cookie。“cookie_dict”指字典对象,必须有 name和value值。
  • deleteCookieNamed(String name) 删除Cookie 信息。 “name”是要删除的 cookie的名称; “optionsString” 是该Cookie的选项,目前支持的选项包括“路径” , “域” 。
  • deleteAllCookies() 删除所有 cookie 信息。

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

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

相关文章

密码学证明方案寒武纪大爆发——扩容、透明性和隐私的变革潜力

1. 引言 前序博客有&#xff1a; ZKP大爆炸 本文主要参考&#xff1a; StarkWare 2023年6月博客 Cambrian Explosion of Cryptographic Proofs----The transformative potential for scalability, transparency, and privacy2023年3月Eli Ben-Sasson在The 13th BIU Winter …

nginx页面优化与防盗链

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、nginx页面优化1.版本号1.1 查看版本号1.2 修改版本号1.2.1 修改配置文件1.2.2 修改源码文件&#xff0c;重新编译安装 2.nginx的日志分割3.nginx的页面压缩3.1 …

微软亚洲研究院推出AI编译器界“工业重金属四部曲”

编者按&#xff1a;编译器在传统计算科学中一直是一个重要的研究课题。在人工智能技术快速发展和广泛应用的今天&#xff0c;人工智能模型需要部署在多样化的计算机硬件架构上。同时&#xff0c;训练和部署大型人工智能模型时又对硬件性能有着更高的要求&#xff0c;有时还需根…

macOS Ventura 13.5beta5(22G5072a)发布

系统介绍 黑果魏叔 7 月 11 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 5 更新&#xff08;内部版本号&#xff1a;22G5072a&#xff09;&#xff0c;本次更新距离上次发布隔了 12 天。 macOS Ventura 带来了台前调度、连续互通相机、Fa…

1g的视频怎么做二维码?较大视频如何生成二维码?

现在很多参与评选活动时&#xff0c;会制作好相关的视频内容&#xff0c;然后生成二维码之后&#xff0c;发送给活动管理人员从而参与评选。在根据要求录制视频时&#xff0c;有些视频会因为时间太长&#xff0c;导致文件过大&#xff0c;那么如何将超过1g的等视频生成二维码&a…

基于DEF生成LIB的方法

基于DEF生成LIB的方法 [生成64位lib] lib /def:libcurl-x64.def /MACHINE:x64 /OUT:libcurl-x64.lib[生成32位lib] lib /def:libcurl-x64.def /OUT:libcurl-x64.lib

OpenCV 图像处理算法和技术的应用实践

OpenCV 图像处理算法和技术的应用实践 导语一、图像滤波算法二、图像分割技术三、特征提取与描述算法四、实践示例&#xff1a;图像风格转换总结 导语 图像处理算法和技术在计算机视觉和图像处理领域发挥着重要作用&#xff0c;通过对图像进行分析、增强和转换&#xff0c;可以…

2023机器人操作系统(ROS)暑期学校预热-线下时间/地点-(转发)

原文地址&#xff1a; https://mp.weixin.qq.com/s/McjBgCpecL6OMgpcrPyY_Q 中国机器人操作系统&#xff08;ROS&#xff09;暑期学校自2015年举办以来&#xff0c;被中国机器人业界和学界&#xff0c;以及ROS开源基金会誉为除了ROSCon之外规模最大、参与人数最多、最成功的RO…

什么是Heatmap(热图)图表?用DHTMLX可实现快速构建

DHTMLX Chart是DHTMLX最新发布的JavaScript UI小部件库的核心内容之一&#xff0c;这个图表小部件收到了几个重要的更新&#xff0c;但其中最引人注目的是一个新的数据可视化选项——日历热图。 DHTMLX专注于JavaScript和HTML5 UI小部件和库&#xff0c;以帮助开发人员更快地构…

基于springboot+vue的疫情管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

不外传秘诀| docker 快速搭建常用的服务环境

本文主要给大家介绍如何使用 docker 搭建常用的服务环境&#xff0c; 包括mysql,reedis,nginx,jenkins 等常用的环境&#xff0c;下面直接进入主题。 1、MySQL 部署 ①搜索 MySQL 镜像 docker search mysql ②拉取 MySQL 镜像 docker pull mysql:5.7 ③创建容器&#xf…

基于STM32单片机的智能家居烟雾温度火灾防盗报警的设计与实现

功能介绍 以STM32单片机作为主控系统&#xff1b;LCD1602液晶显示屏来显示显示测得的值&#xff1b;SR501人体红外感应是否有人进行防盗&#xff1b;通过烟雾传感器MQ-2获取前的烟雾值&#xff1b;通过DHT11温湿度传感器来获取当前的温湿度&#xff1b;所有的信息通过通过esp82…

php通过IP获取用户当前所在城市

php获取当前用户所在城市 php通过ip免申请api获取所在城市的代码包括省市区sql数据 <?php function getName($pinyin,$lv){$servername "localhost";$username "root";$password "root";$dbname "ttx";try {$conn new PDO(…

机器学习15:神经网络-Neural Networks

神经网络是特征交叉的更复杂版本。本质上&#xff0c;神经网络会学习适当的特征组合。本文主要介绍神经网络的结构、隐藏层、激活函数等内容。 目录 1.神经网络&#xff1a;结构 2.隐藏层 3.激活函数 3.1 常用激活函数 3.2 小结 4.神经网络小练习 4.1 第一个神经网络 …

Jina AI 受邀出席 WAIC 2023「科技无障碍」论坛,与行业专家共话 AI 普惠未来

7 月 6 日&#xff0c;2023 世界人工智能大会&#xff08;WAIC&#xff09;在上海世博中心及世博展览馆开幕&#xff0c;并在浦东张江、徐汇西岸设分会场&#xff0c;同步在闵行等产业集聚区开展同期活动。本届大会由上海市人民政府和国家发改委、工信部、科技部、国家网信办、…

基于JSP+Servlet的医药药品管理系统

用户类型&#xff1a;双角色角色&#xff08;患者、管理员[医生]&#xff09; 设计模式&#xff1a;MVC&#xff08;jspservletjavabean) 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 主要技术&#xff1a;jsp、servlet、jdbc、jsp、html5、jquery、css、js…

RabbitMQ之交换机

RabbitMQ之交换机 1. Exchanges1.1 Exchanges 概念1.2 Exchanges 的类型1.3 无名 exchange 2. 临时队列3. 绑定&#xff08;bindings&#xff09;4. Fanout4.1 Fanout 介绍4.2 Fanout 实战 5. Direct exchange5.1 Direct exchange 介绍5.2 多重绑定5.3 实战 6. Topics6.1 之前类…

亚马逊云科技143项安全标准与合规性认证,帮助企业满足安全合规要求

在亚马逊云科技&#xff0c;为满足客户不断变化的需求&#xff0c;亚马逊云科技持续创新与迭代&#xff0c;设计的服务能帮助客户满足最严格的安全和合规性要求。针对安全相关工作&#xff0c;亚马逊云科技服务团队与Amazon Security Guardians云守护者项目密切配合&#xff0c…

linux终端前面显示base和不显示base

问题描述&#xff1a;前提是系统里装了anaconda3&#xff0c;有时候两个服务器之间相连长时间没使用或者访问时候前面没显示base。。 解决&#xff1a;我们在做深度学习时需要一个环境&#xff0c;如果前面没显示base的话&#xff0c;你直接conda activate是激活不了我们需要跑…

降级npm后,出现xxx 不是内部或外部命令解决方法

比如我安装了anyproxy npm install anyproxy -g 之后在cmd中输入anyproxy 发现 anyproxy 不是内部或外部命令解决方法. 一般出现这样的问题原因是npm安装出现了问题&#xff0c;全局模块目录没有被添加到系统环境变量。 Windows用户检查下npm的目录是否加入了系统变量P…