首页
归档
友链
关于
Search
1
网易云音乐黑胶会员月月免费赠送
3,877 阅读
2
十年之约RSS聚合订阅服务上线
3,536 阅读
3
工资发放日的区别
2,786 阅读
4
rsyslogd内存占用过高解决方案
2,519 阅读
5
Nginx反代MinIO后,上传文件签名异常
2,317 阅读
零碎
标本
码海
工具
其他
登录
Search
标签搜索
北京
摄影
生活
旅行
Java
学习笔记
教程
Linux
服务器
软件
日记
SpringBoot
Windows
服务
数据库
福利
Spring
系统
SQL
docker
萧瑟
累计撰写
201
篇文章
累计收到
1,442
条评论
首页
栏目
零碎
标本
码海
工具
其他
页面
归档
友链
关于
搜索到
201
篇与
萧瑟
的结果
2023-08-10
使用VuePress搭建Wiki静态网站
最近使用 语雀 做了一个知识手册,改版后只能会员才能分享,想着数据托管到第三方,还不如自建。参考了其他静态网站生成,最后决定使用 VuePress 来搭建。环境要求Node.js v16.19.0+搭建框架步骤 1: 创建并进入一个新目录mkdir wiki-book cd wiki-book步骤 2: 初始化项目npm init步骤 3: 将 VuePress 安装为本地依赖npm install -D vuepress@next步骤 4: 在 package.json 中添加一些 scripts{ "scripts": { "docs:dev": "vuepress dev docs", "docs:build": "vuepress build docs" } }步骤 5: 将默认的临时目录和缓存目录添加到 .gitignore 文件中echo 'node_modules' >> .gitignore echo '.temp' >> .gitignore echo '.cache' >> .gitignore步骤 6: 创建你的第一篇文档mkdir docs echo '# Hello VuePress' > docs/README.md步骤 7: 在本地启动服务器来开发你的文档网站npm run docs:devVuePress 会在 http://localhost:8080 启动一个热重载的开发服务器。当你修改你的 Markdown 文件时,浏览器中的内容也会自动更新。进阶配置启动上面项目后,会在docs 下会生成一个.vuepress 目录,我们在这个目录下创建一个config.js 文件。这个是 VuePress 站点的基本配置文件,在这个里面我们可以配置站点基础信息、插件、主题等。具体可以参考官方文档:配置信息这里我把常用的配置分享一下:import { defineUserConfig } from 'vuepress' //引入默认主题 import { defaultTheme } from '@vuepress/theme-default' export default defineUserConfig({ // 开发服务器的端口号 port: 8080, // 启动后打开浏览器 open: false, // 设置站点根路径 base: '/', // 站点的语言 lang: 'zh-CN', // 站点的标题 title: '知识手册', // 站点的描述 description: '站点的描述', // 默认主题配置 theme: defaultTheme({ // 默认颜色模式 colorMode: 'auto', // 是否启用切换颜色模式的功能 colorModeSwitch: true, // logo Logo 图片的 URL。 //logo: '' // 导航栏配置 navbar:[ ], // 侧边栏配置 sidebar:[ ] }) })打包配置运行 npm run docs:build 生成后的文件在 docs\.vuepress\dist 中,将这个文件压缩丢在服务器中,就可以打开了。一般只要支持 html 的web服务器都是可以的。这里不做过多描述。样例代码{cloud title="样例代码" type="lz" url="https://xiaose.lanzoum.com/b02ewqy8h" password="h39g"/}
2023年08月10日
330 阅读
2 评论
2023-08-08
2023年07月碎碎念
“碎碎念”系列迎来了23年首更,今年比较忙,年后就一直在客户驻场,没有外网,所以博客也很少打理了。眼看23年已经过了大半,简单记录一下最近的琐事。工作临时借调到兄弟部门驻场,待了两个月;这边伙食不错,一天5元(早1午2晚2),比外面便宜太多了,且种类挺多的,每顿都有肉,我已经三个月没吃过主食了,基本上吃菜都吃饱了,哈哈。上班过程中,跟家里一样,代码敲累了,直接点根烟抽,抽完继续干活。生活“两点一线”的生活,无趣且烦躁。北京最近暴雨洪水灾害,山路也封了不少,摩友喊着跑山也没去。主要是这破车,跟我两个多月跑了小六千公里,已经出现了一些故障,换了一些零件了,但是上下班路上,发动机故障灯经常亮,每次去修车点看,然后又不亮了,修车师傅说需要等故障灯亮了才能知道是什么问题,很烦。伙食好起来也不忌口,某天吃坏肚子,去安贞医院急诊打吊瓶,然后吃了一些消炎药,稍微好多了,医保报销后花了小四百,补充医疗报销后,最终花了30元。最近看了3场电影:《八角笼中》、《茶啊二中》、《孤注一掷》八角笼中:开头故事点很足,过程也很精彩、很有看头,但是结尾有些潦草收场。茶啊二中:占用了体育课真的会让学生痛苦,零分的评价表真的会让老师难过,寝室是吃鸳鸯锅的夜宵摊,卫生间才是开小会的集聚地。再也回不去的青春年华。孤注一掷:点映首播,剧情保守,典型国内的反诈宣传片,宣传很到位,基本点映电影院都是满场,没有空位。idea自从《2022.01.03 碎碎念》中搭建了自己的一个后台系统,接入了十年之约、疫情风险区域、域名管理、51la统计等第三方系统,Typecho 接入了评论、文章、分类、标签管理,但是文章的富文本问题还一直没解决,所以还没正式对接博客的后台,今年抽空再补补坑。前段时间,本地电脑的 KeyManager 证书管理工具莫名抽风,所以下一步的计划是将SSL证书管理也纳入统管平台开发计划中。因为后端程序解析证书内容比较繁琐,且没找到合适的技术方案,所以考虑的是托管在腾讯云SSL证书中,然后调用腾讯云的接口在自己的后台中实现,本地不做存储,也算勉强解决了自己的问题。列一个开发清单:{ } 企业邮箱对接;{ } Typecho博客对接;{ } SSL证书管理;{ } 博客订阅管理;{ } 书签管理;23年剩下的时间就给自己列这些功能点吧,自己慢慢迭代更新中,只要自己用的舒服,也算写了一个好的程序,哈哈。
2023年08月08日
511 阅读
8 评论
2023-06-11
druid连接池实现数据库加密
无论是公司的项目还是个人的项目,我们都会选择将源码上传到 Git 服务器(GitHub、Gitee 或是自建服务器),但只要将源码提交到公网服务器就会存在源码泄漏的风险,而数据库配置信息作为源码的一部分,一旦出现源码泄漏,那么数据库中的所有数据都会公之于众,其产生的不良后果无法预期。于是为了避免这种问题的产生,我们至少要对数据库的密码进行加密操作,这样即使得到了源码,也不会造成数据的泄露。怎么实现加密? 对于 Java 项目来说,要想快速实现数据库的加密,最简单可行的方案就是使用阿里巴巴提供的 Druid 来实现加密。交互流程执行命令这里我们以 1.2.18 版本为例,各位也可以选择其他版本,命令基本都是一样的。 java -cp [druid-1.2.18.jar仓库路径] [com.alibaba.druid.filter.config.ConfigTools] [密码]命令示例java -cp D:\druid\druid-1.2.18.jar com.alibaba.druid.filter.config.ConfigTools 123456 执行结果: privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEAloMI1R+5QNFTDAUvZ5KCkq+qauA2IJbiYR0ghk9ssWm7lPooZEOipCa88W0rya/4oaOt6i0iVlS/EmtmMCTZ7QIDAQABAkEAjWMyXOKcJ+N7XANS8LyUpC8Yq6VLs3mJ1yiBcSoTNORpTxndFog/BXUXQP6yTkNHk+Nc5sxdGvl42y3mywiRAQIhAMhiyFRwWWdImzPR+fC8n6s3+B341jy3AWMrixXMAJydAiEAwEjAp9LTgS0fIoEtlz6KYbVnsionIIof1JKAbsJjKZECIQCuthHcLSiF+LP49nZpAsxjyCS4XSDNRvIauPhHRNqzsQIhAJuBux1+6cLMxSNYqZBp6ex/k2+Jm787Nebq3Ke22g+hAiBi9IOPYlm40BAp9jkr2Z2/yqV1E0ppfqigUbFNIpp79g== publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJaDCNUfuUDRUwwFL2eSgpKvqmrgNiCW4mEdIIZPbLFpu5T6KGRDoqQmvPFtK8mv+KGjreotIlZUvxJrZjAk2e0CAwEAAQ== password:YJHHitRl6unpzMi4dfxDOUH7R0kSB/32Wxu0D+xRA5ijmmaO8whHSlCAm3iQ9OqtJXwPU/NzcKmGx/QvhRxnHg==截图示例替换配置文件spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource druid: url: jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root #生成后的密文 password: YJHHitRl6unpzMi4dfxDOUH7R0kSB/32Wxu0D+xRA5ijmmaO8whHSlCAm3iQ9OqtJXwPU/NzcKmGx/QvhRxnHg== filters: config connect-properties: config.decrypt: true #生成的公钥 config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJaDCNUfuUDRUwwFL2eSgpKvqmrgNiCW4mEdIIZPbLFpu5T6KGRDoqQmvPFtK8mv+KGjreotIlZUvxJrZjAk2e0CAwEAAQ==
2023年06月11日
195 阅读
1 评论
2023-06-11
EasySpider 一个可视化爬虫软件
今天给大家推荐一个可视化爬虫软件:EasySpider ,可以使用图形化界面,无代码可视化的设计和执行爬虫任务。只需要在网页上选择自己想要爬的内容并根据提示框操作即可完成爬虫设计和执行。同时软件还可以单独以命令行的方式进行执行,从而可以很方便的嵌入到其他系统中。这个开源项目超级好用,star 数近万,非常受欢迎;一个不需要写代码,几分钟设计一个爬虫的开源、免费、无广告的开源项目。特点开源免费无广告,代码开源,软件所有功能均免费(商用除外),且没有任何弹窗和外部广告。跨平台,软件可以在 Windows,MacOS 和 Linux 上运行。快速,一个爬虫任务只需要 2-5 分钟即可设计完成,采集时支持并行多开,因此保证了采集速度。安全,不需要注册,所有任务和数据均保存在本地,不经过任何第三方服务器。灵活,可任意添加浏览器插件,任意执行 JavaScript 指令和调用系统外部程序。命令行执行,直接以命令行的方式执行任务,无缝嵌入到其他程序中。元素截图和 OCR 识别,支持元素截图和 OCR 识别,以及图片下载。定时执行,支持定时执行任务,成为贴心生活小助手。运行效果 这个开源项目还非常人性化提供了爬虫案例以及使用视频教程。软件下载{cloud title="Github仓库" type="github" url="https://github.com/NaiboWang/EasySpider" password=""/}{cloud title="GitHub最新版" type="github" url="https://github.com/NaiboWang/EasySpider/releases" password=""/}{cloud title="国内高速下载" type="default" url="https://github.com/NaiboWang/EasySpider/releases/download/v0.3.2/Download_Link_Address_in_China_Mainland.txt" password=""/}
2023年06月11日
752 阅读
7 评论
2023-06-08
Joe 主题对接腾讯 LBS 展示 IP 属地(二)
书接上回,我们在主题中对接腾讯LBS IP查询服务后,会有一个bug:如果某篇文章评论过多,则某些评论IP定位数据无法显示,这个是因为腾讯LBS服务个人开发者的并发量限制为5次/秒。在上一个教程发布后,也有大佬发现了这个问题,不过这个问题我顺手就解决了,但是解决方案没有分享出来,因为需要改typecho系统的代码。这个已经脱离技术小白的范围,请合理折腾,折腾前记得备份数据。{anote icon="fa-internet-explorer" href="https://blog.yanqingshan.com/130.html" type="success" content="Joe 主题对接腾讯 LBS 展示 IP 属地"/}原理这一次折腾的原理是,我们在数据库中添加一个字段作为IP属地信息的一个冗余信息;当用户评论时,获取用户IP地址,调用腾讯LBS服务进行查询,将查询到的数据写入数据库中,这样就避免并发量超出限制。执行sql语句23.06.10:根据Typecho数据库设计文档又更新了一下sql语句ALTER TABLE `typecho_comments` ADD COLUMN `ipRegion` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'IP中文地址' AFTER `parent`, DROP PRIMARY KEY, ADD PRIMARY KEY (`coid`) USING BTREE;上面sql就是在字段coid后增加一个ipRegion的字段,并且添加一个备注信息。修改代码我们打开网站根目录,路径:/var/Widget/Base/Comments.php 这个文件是系统评论对外提供的方法,包括插入数据和查询数据等方法,有能力的同学,可以翻翻代码,基本上面都有注释;大概55行,也就是增加评论 的方法首行,增加以下代码,将key和sign_key修改为自己申请的就可以。$ipRegion = ''; $cip = empty($comment['ip']) ? $this->request->getIp() : $comment['ip']; $key = '配置自己申请的key'; //签名校验的KEY $sign_key = '配置自己申请的sign_key'; $sign = md5('/ws/location/v1/ip?ip='.$cip.'&key='.$key.$sign_key); $url = 'https://apis.map.qq.com/ws/location/v1/ip?ip='.$cip.'&key='.$key.'&sig='.$sign; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'); $content = curl_exec($ch); curl_close($ch); if($content) { $json = json_decode($content,true); if($json['status'] == 0 ){ $resjson = $json['result']['ad_info']; if($resjson['nation'] == '中国'){ if($resjson['province']=='北京市'||$resjson['province']=='天津市'||$resjson['province']=='上海市'||$resjson['province']=='重庆市'){ $ipRegion = $resjson['city']; }else{ $ipRegion = $resjson['province'].$resjson['city']; } }else{ $ipRegion = $resjson['nation'].$resjson['province'].$resjson['city'].$resjson['district']; } } }上面代码增加完后,大概在108行,也就是构建插入结构 那行注释里面增加一个参数,把下面代码放在[]中,'ipRegion' => $ipRegion, 在381行后,插入下面,这个就是把查询对象增加一个输出值'table.comments.ipRegion'基本上请求和写入已经完成,我们再改一下后台管理界面,把这个ip属地也添加到页面上,这样后台也方便查询打开admin/manage-comments.php136行后增加以下代码<br /><span><?php $comments->ipRegion(); ?>最后我们再来修改主题的评论,这里以Joe主题为例文件路径joe/public/comment.php<?php $comments->ipRegion(); ?> 找到合适位置显示IP属地,我是放在112行的<div class="agent"> <?php $comments->ipRegion(); ?> <?php _getAgentOS($comments->agent); ?> · <?php _getAgentBrowser($comments->agent); ?> </div>最终效果如下
2023年06月08日
457 阅读
7 评论
2023-05-24
麦聪SQL Studio Web端数据库管理工具
之前看公众号上推荐了一款Web端的数据库管理工具,它就是麦聪SQL Studio,为什么我要找一款Web端的管理工具,因为类似Navicat之类比较好用的工具都需要收费,且使用破解,有律师函风险,所以需要一款好用的软件,且这款软件支持web端,Web端管理简单,可以协同使用,一个人配置了,其他人也是可以使用,还可以配置账号,数据也可以进行隔离。废话不多说,先上部署教程。这款软件是使用Java语言开发,所以需要JDK环境。官方支持Windows、Mac、Linux,这里Windows、Mac,就不就是跟之前客户端一样,使用它的自带脚本就可以启动,启动后也是Web端,开放端口也是可以多用户使用,既然是Web端,肯定得部署到服务器上比较方便一些,也不用关机之类,部署到外网,还能远程使用,很方便。本次教程服务器已经配置过JDK环境了,直接下载无SDK版本,具体需要看自己服务器环境;{cloud title="官方下载" type="default" url="http://www.maicongs.com/#/home/probation/studio" password=""/}直接下载 Linux 版本,无SDK版本,上传到服务器进行解压unzip -O CP936 sqlstudio_linux_no_jdk_1.6.0.zip cd sqlstudio ./maicong-sqlstudio.sh start _ _ _ __ ___ __ _(_) ___ ___ _ __ __ _ __| | __ _ __ _ ___ | '_ ` _ \ / _` | |/ __/ _ \| '_ \ / _` | / _` |/ _` |/ _` / __| | | | | | | (_| | | (_| (_) | | | | (_| | | (_| | (_| | (_| \__ \ |_| |_| |_|\__,_|_|\___\___/|_| |_|\__, | \__,_|\__,_|\__,_|___/ |___/ maicong-sqlstudio server is started JAVA_OPTS: -server -Xms256m -Xmx4g -XX:+UseG1GC -XX:+UseStringDeduplication -Xloggc:./log/maicong-sqlstudio-gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./log/maicong-sqlstudio-heapdump -Dfile.encoding=utf-8 please waiting start看到上面这个画面,服务已经启动了,访问http://ip:18888 即可访问到服务,首次登录用户名为固定的maicong,密码可自己设置,后续可在个人中心里修改。 该工具支持的数据源还是挺多的,Oracle、PostgreSQL、MySQL、SQLite、SQL Server(Beta)、DM、KingBase、MongoDB(Beta)、Impala九种。本文以MySQL为例,输入ip地址和账户密码点击“测试连接”,会提示是否成功。然后点击左侧logo,返回首页,即可查看已添加的数据源。右击数据源,点击新建查询,就可以使用。这个软件还是很实用的,基本上可以替代Navicat作为开发使用。{cloud title="官方下载" type="default" url="http://www.maicongs.com/#/home/probation/studio" password=""/}题外话最近阿里巴巴也出了一款Web端管理工具,也是一款开源软件,跟今日分享的差不多,它是“Chat2DB”,只不过体验了一下,感觉还是差点意思,等待它后续更新吧,不过它集成了chatpgt,有兴趣的可以体验一下。后续如果更新好用的话,我再来水一篇文章。项目地址:https://github.com/alibaba/Chat2DB
2023年05月24日
562 阅读
1 评论
2023-05-07
再见,我的大玩具
时隔一年,陪伴我一年的大玩具也离开了我,自从入了摩友圈,经常刷抖音看到,各种摩友博主惨淡离世,我家小可爱也每每提醒我要慢点。所以经过思索,把这个车转手卖了,总里程不到6000公里。买家也很实在,差不多1.3W收了我的22款魅影255S,而我新的石油版画也才贴不就,真是可惜了。过户其实也很简单,买方觉得繁琐,后来找了黄牛,花了450,如果自己去办的话,差不多300左右就能解决。卖完车后,群里的小伙伴也经常喊我去跑山踏春。车卖了不到一周,又去车行看了看车,原本想入手川崎400,谁知钱包羞涩,跟小可爱谈了谈,最后入手了蒙娜丽莎melalisa150,这个踏板我家小可爱也是可以骑的,算是双赢。这次入手的是火星灰/黄这款,极限速度能跑到105km/h,买车当天车直接骑走了,车行直接去拿了个临牌。简单记录一下,作为生活中的流水账。
2023年05月07日
915 阅读
44 评论
2023-04-28
Java 使用JDBC备份数据库中的表和数据
实现思路加载数据库驱动程序并建立数据库连接。使用JDBC API查询需要备份的表格和数据。在输出文件中以适当的格式编写SQL语句来创建表格。用适当的格式编写INSERT语句将行数据写入输出文件。5. 关闭所有数据库连接和输出文件。实现代码package com.yanqingshan.admin.jdbc; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.io.FileWriter; import java.io.IOException; import java.sql.*; import java.util.ArrayList; import java.util.List; /** * 通过JDBC备份 库表数据 * * @author yanqs * @date 2023年04月28日 9:31 */ @Slf4j @SpringBootTest class BuildSql { @Test void testBuildSql() throws ClassNotFoundException, SQLException, IOException { String dbUrl = "jdbc:mysql://192.168.57.110:3306/boot-startup"; String username = "test"; String password = "123456"; // 加载JDBC驱动程序 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立数据库连接 Connection conn = DriverManager.getConnection(dbUrl, username, password); // 创建Statement对象 Statement stmt = conn.createStatement(); // 查询所有表格名字 ResultSet result = stmt.executeQuery("SHOW TABLES"); // 备份的SQL文件 FileWriter writer = new FileWriter("backup.sql"); // 循环遍历所有表 存表 List<String> tableNameList = new ArrayList<>(); while (result.next()) { tableNameList.add(result.getString(1)); } for (String tableName : tableNameList) { log.info("开始备份“{}”表结构", tableName); // 在输出文件中写入创建表格SQL语句 ResultSet rs = stmt.executeQuery("SHOW CREATE TABLE " + tableName); if (rs.next()) { writer.write("\n\n" + rs.getString(2) + ";\n\n"); } // 循环遍历表格中的所有行来写入数据 rs = stmt.executeQuery("SELECT * FROM " + tableName); int columnCount = rs.getMetaData().getColumnCount(); log.info("开始生成“{}”表数据", tableName); while (rs.next()) { writer.write("INSERT INTO " + tableName + " VALUES ("); for (int i = 1; i <= columnCount; i++) { writer.write("'" + rs.getString(i) + "'"); if (i < columnCount) { writer.write(","); } } writer.write(");\n"); } } // 关闭所有连接 writer.close(); result.close(); stmt.close(); conn.close(); log.info("备份完成"); } }实现效果
2023年04月28日
242 阅读
4 评论
2023-04-23
Java+Selenium学习笔记
Selenium介绍Selenium是一个用于Web应用程序自动化测试工具,背后有google 维护源代码,支持全部主流浏览器,支持主流的编程语言,包括:java,Python,C#,PHP,Ruby等特点开源、免费多浏览器支持:FireFox、Chrome、IE、Opera、Edge;多平台支持:Linux、Windows、MAC;多语言支持:Java、Python、Ruby、C#、JavaScript、C++;对Web页面有良好的支持;简单(API 简单)、灵活(用开发语言驱动);支持分布式测试用例执行。chromeDriver驱动下载:http://chromedriver.storage.googleapis.com/index.html下载的驱动要和自己安装的谷歌浏览器版本相互匹配项目依赖包最新版可以在mvnrepository查找,链接如下<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>${selenium.version }</version> </dependency> 使用手册1 导航1.1 打开网页driver.get("https://www.baidu.com") driver.navigate.to("https://www.baidu.com") // 区别:get是有逻辑的跳转,而navigate.to是直接跳转到该页面,没有任何逻辑 // 参考:https://blog.csdn.net/gaokao2011/article/details/171699691.2 获取当前页面url//返回的是字符串 String url = driver.getCurrentUrl(); //https://www.baidu.com System.out.println(url); 1.3 返回上一页driver.navigate.back();1.4 前进下一页面driver.navigate.forward();1.5 刷新当前页面driver.navigate.refresh();1.6 获取当前页面的titleString title = driver.getTitle(); //返回字符串 System.out.println(title); //百度一下,你就知道2 窗口、Tabs当driver打开一个新窗口时,若想操作新窗口上的元素,则需要将driver切换到新窗口2.1 获取当前窗口句柄//返回字符串 String currentWindowHandle = driver.getWindowHandle();2.2 获取所有窗口句柄//返回字符串集合 Set<String> allWindowHandles = driver.getWindowHandles(); 2.3 切换到新窗口//newHandle为要切换的新窗口的句柄 driver.switchTo().window(newHandle); 2.4 关闭窗口或tabsdriver.close();2.5 会话结束时退出浏览器driver.quit();3 Frames and IFrames当页面上有iframe和frame元素时,若想操作iframe和frame下的html元素,则需要切换driver3.1 切换到指定iframe或frameWebElement element_iframe = driver.findElement(By.id("iframe1")); driver.switchTo().frame(element_iframe);3.2 切换回父页面driver.switchTo().defaultContent();4 window管理4.1 获取窗口大小int width = driver.manage().window().getSize().getWidth(); int height = driver.manage().window().getSize().getHeight(); Dimension size = driver.manage().window().getSize(); int width = size.getWidth(); int height = size.getHeight();4.2 设置窗口大小driver.manage().window().setSize(new Dimension(1024,768));4.3 获取窗口位置int x = driver.manage().window().getPosition().getX(); int y = driver.manage().window().getPosition().getY(); Point position = driver.manage().window().getPosition(); int x = position.getX(); int y = position.getY();5 设置窗口5.1 设置窗口位置driver.manage().window().setPositon(new Point(0,0));5.2 最大化窗口driver.manage().window().maximize();5.3 全屏窗口driver.manage().window().fullscreen();6 定位driver.find 或 element.findfindElement(By.id("XXX")) findElement(By.name("XXX")) findElement(By.className("XXX")) findElement(By.cssSelector("XXX")) findElement(By.linkText("XXX")) findElement(By.partialLinkText("XXX")) findElement(By.tagName("XXX")) findElement(By.xpath("XXX")) findElements(By.id("XXX")) findElements(By.name("XXX")) findElements(By.className("XXX")) findElements(By.cssSelector("XXX")) findElements(By.linkText("XXX")) findElements(By.partialLinkText("XXX")) findElements(By.tagName("XXX")) findElements(By.xpath("XXX"))7 执行js脚本//声明一个js执行器 JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("alert(123)");
2023年04月23日
266 阅读
0 评论
2023-03-22
癸卯年甲寅月塞北之旅
偶然间看到12306铁路会员还有100多会员积分要到期了,准备换张周边火车票,来场说走就走的旅行,考虑了几个地方,天津去了好几趟,石家庄没什么玩的地方,张家口滑雪又怕摔,想来初春可以去草原逛逛。就定了去乌兰察布的行程。{dplayer src="https://blog.yanqingshan.com/usr/upload/2023/03/20230305.mp4"/}在“马蜂窝”上看到乌兰察布有火山,景色也不错。但是交通不是很方便,就准备了租车玩耍,行程攻略写了一些,然后就因为工作繁忙,没有下文了,每次都说走就走,不要攻略也罢,走到那算那。乌兰察布内蒙古有条火山喷发带:北起大兴安岭北段东坡的诺敏河火山群,经大兴安岭的阿尔山—柴河火山群、锡林浩特—阿巴嘎火山群,南抵察哈尔右翼后旗的乌兰哈达火山群,绵延近千公里,其中乌兰哈达火山群直到2012年才被国内外火山学界所知。这条火山带最突出的特点就是年轻:从第四纪的晚更新世(大约12万年前)才进入活动鼎盛期。但其实,这个火山带的大多数火山都喷发于距今4万—6万年前。尤其可贵的是,其中一些火山喷发于全新世,即距今一万年前,在这里甚至还发现了喷发于两千年前的火山。{callout color="#ef584d"}PS:来这里建议自驾,因为交通不便,租车也比较便宜。{/callout}沿着草原一路前行,翻过几座山,就来到了呼和浩特。呼和浩特塞上老街位于呼和浩特市大南街大召寺附近,是条具有明清建筑风格的古街。其兴建于明万历年间的大召,门前西侧有一条横街,立了牌楼,名为塞上老街。老街其实不老,塞上老街是市政府花两年时间重新修缮,体现历史文化名城亮点的一条街道。因为是晚上去的,吃了一些小吃,逛了逛,人并不是很多。羊肉串口感也不错。旁边就是大召寺,但是晚上关门了,也就没去看看,听说很宏伟。第二天就去了内蒙古博物馆,这个是全区唯一的自治区级综合性博物馆,也是全国少数民族地区最早建立的博物馆。内蒙古博物馆的展厅大楼造型别致,极具民族特色;楼顶塑有凌空奔驰的骏马,象征着内蒙古的吉祥与腾飞,是自治区标志性建筑之一。博物院的展厅大楼有四层,其中二、三、四层用于展览服务。院内目前有四个基本陈列,分别是《内蒙古古生物化石陈列》、《内蒙古历史文物陈列》、《内蒙古民族文物陈列》、《内蒙古革命文物陈列》。下午就着手回京了,两天一夜内蒙之旅到此完结,等再过段时间,再去逛逛大草原,吃上一只烤全羊,应该会更爽。
2023年03月22日
287 阅读
16 评论
1
...
5
6
7
...
21