自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(336)
  • 收藏
  • 关注

原创 【测试】微软测试框架playwright的使用

BrowserContext即上下文,类似于浏览器的“新的窗口”,就是在同一个浏览器实例里打开互不影响的上下文对象(不共用cookie),比打开两个浏览器更省内存。使用上下文的方式打开浏览器,最大的好处就是不用手动关闭Playwright,但是由于代码需要缩进,如果是在命令行交互式操作那就显得不方便,这时候我们也可以手动打开和关闭Playwright。对于需要登录的网站,如果不想每次都登录,可以把cookie保存下来,然后下次再加载,这样就可以免去每次登录的麻烦了。

2024-02-27 18:00:48 1220 1

原创 【PostgreSQL】创建枚举类型和修改枚举值

如果想要删掉某个枚举值,操作方法是,重新定义一个枚举类型替换掉原有的枚举类型,比如说我这里有一个order表,它的status字段是名为order_status_enum的枚举类型。在postgresql中可以定义枚举数据类型,但是它可以增加和修改枚举值,不能删除已经定义好的枚举值。如果你想要在已经定义好的枚举类型中添加新的枚举值,以使用下面的写法。创建枚举类型的语法如下,注意枚举类型的顺序就是枚举值的顺序。如果你对某个枚举值不满意,可以直接修改它。

2024-01-22 18:35:05 597

原创 【python】使用pycryptodome完成AES加密解密

Python实现AES的库也有好几个,但是建议使用pycryptodome,这个库一直在维护更新,而且兼容更多Python版本以及系统平台。,翻译为高级加密标准算法,是一种对称密钥加密算法。虽然AES对称加密比较方便,但是还是不够安全,如果你希望使用对称加密,也可以参考一下之前的文章。AES加密过程大概是,明文被划分为若干个块,然后每个块使用密钥进行加密,最终生成密文。CBC模式除了密钥(key),还需要一个偏移量(iv),偏移量的值也是需要16个字符。

2024-01-17 15:40:10 620

原创 【js】SSH隧道远程连接mysql

使用方式就是,首先通过ssh2连接上跳板机服务器,然后再利用forwardOut()方法转发数据,拿到stream,再传给MySQL就可以连接上了,参考代码如下。MySQL被部署在某个机器上,为了安全,需要通过一个跳板机进行访问,该跳板机可以有ssh访问,给了一个私钥Key文件和一个通行短语,如果是Python,可以。本文是通过nodejs实现,由于我在网上没有找到类似的代码,故自己搞出来之后记录一下,也希望能帮到有跟我一样需求的同学。因为环境用的是nodejs,所以可以直接使用npm安装就行,需要。

2023-11-30 14:59:55 2023

原创 【Python办公】win32com打开Office、WPS文档的启动方式

COM(Component Object Model)是一种面向组件的二进制接口标准,允许不同的软件模块之间进行交互和通信。Python中的win32com是使用Python控制com的公开库,对于操作软件非常方便,比如是操作Office软件进行文档自动化。Office和WPS都能控制,但是它们的启动方式确实不一样的。

2023-11-11 17:24:03 3046

原创 scrcpy常用命令

是一个基于adb调试实现的屏幕共享软件,可以将安卓手机共享到电脑,并且可以在电脑控制手机。首先确保手机已经开启USB调试,并且用数据线连接电脑(无线调试不用)命令启动scrcpy就能使用了,如果想要自定义,后面可以加上各种参数。屏幕共享、屏幕录制、声音转发、复制粘贴、画质控制、OTG。如果已经把scrcpy添加到环境变量,可以直接在终端执行。对手机无侵入、可以不联网(数据线)、低延迟、免费开源。scrcpy支持Windows、macOS、Linux。安卓版本要求大于等于11,如果是11要确保屏幕已解锁。

2023-11-08 16:58:41 2614

原创 【爬虫】charles手机抓包环境设置(设置系统证书)

这个操作很容易,只要获取到root权限就行,你可以直接在文件管理器里把系统证书复制到用户证书的文件夹里,证书是一个.0结尾的文件,我这里是ca499da3.0,如果以前没有安装过用户证书,那用户证书文件夹里只有一个文件,很好找到的。,此时Charles那边应该会有一个确认按钮,确认之后模拟器就会下载证书,下载完完成之后点击安装,模拟器会提醒设置一个锁屏(图案或pin都可以),这时候就可以安装证书了,证书名可以随便写。之后就不受信任了,想要对手机app抓包,就需要把用户证书设置为系统证书(根证书)

2023-10-27 12:26:37 2084

原创 【测试】pywinauto的简单使用(安装、常用对象、元素控件、鼠标操作、键盘操作)

对象,可以通过Application对象的window()方法获取,参数可以是title、classname或者best_match等,这都可以在inspect.exe上看到,不过需要注意的是inspect看到的Name其实对应的是window()的title参数。pywinauto是一个用于自动化Python 模块,适合Windows系统的软件(GUI),可以通过Pywinauto遍历窗口(对话框)和窗口里的控件,也可以控制鼠标和键盘输入,所以它能做的事情比之前介绍的pysimplegui更多。

2023-08-22 17:40:46 8757 2

原创 【测试】selenium拦截Ajax(XHR)等异步请求数据

在爬取某个网站的时候遇到加密参数,由于js代码经过混淆编译不好破解,所以采用selenium的方式获取参数,但是我们获取selenium的数据基本上都是基于页面的,对于网站发起的异步请求,我们可以从日志中提取。显式等待的方式等待某个元素出现,你也可以隐式等待或者直接sleep,如果你不等待,异步请求还没加载完就开始获取,你可能会拿不到想要的数据。的日志,即发送异步请求的数据,因为我需要该请求的请求头,如果是响应类型的日志(方法获取对应的日志,之后再过滤出自己想要的日志就行。字段是没有响应体的,你需要通过。

2023-08-11 18:05:13 3102

原创 【Python】使用nuitka打包Python程序为EXE可执行程序

写好的Python程序如果想要拿到其他电脑上运行,那还得安装一下Python环境和各种库,这是比较麻烦的,所以有必要把它打包成一个可执行的exe文件。但是使用pyinstaller打包出来的程序被360报毒了(主要是我的代码有系统权限操作,会触发报毒机制),后来换成nuitka打包就没有报毒。其实不手动安装也行,因为使用nuitka的时候它检测到没有安装就会提示你安装了,到时候输入"yes"就会自动安装了。因为nuitka是通过c++的方式进行编译的,所以还需要c++的编译环境,可以手动安装一下。

2023-08-02 16:09:34 2540 2

原创 【Django】在Linux上部署Django(nginx+uwsgi)

关于在Linux上使用uwsgi部署Django的项目的过程并不难,主要是配置文件的写法,尤其是nginx的配置文件,本文在Ubuntu20.04上通过uwsgi和nginx部署Django项目。一般来说,如果是Django项目与nginx处于同一台服务器,sock文件的方式会比IP端口更高效一点,但是使用sock文件的时候注意一下是否有读写权限。我们要修改nginx的配置文件,如果你希望监听80端口,你可以直接修改nginx的默认配置文件,一般是。安装完之后,它会自动运行nginx,访问一下本机的IP(

2023-07-04 17:12:02 2560

原创 【测试】Selenium操作Cookie

在平时使用Cookie,我最喜欢直接复制开发者工具中的请求头Cookie的那一段值,因为这样最方便了,但是,好像Selenium不支持通过请求头的方式指定Cookie,至少我没有找到,如果哪位大佬知道,欢迎在评论区分享。现在,只要你之前在浏览器登录过了,那在Selenium中打开的网页也会处于登录状态(除非登录过期了),但这种加载用户文件夹的方式也有个缺点,那就是启动Selenium之前,要先把Chrome浏览器关闭,不然是会报错的。操作Cookie无非就是读取和删除Cookie,下面这些是主要方法。

2023-06-21 16:09:59 2758

原创 【Linux】在Linux系统上安装nodejs和npm

虽然通过apt安装nodejs很方便,但是安装的版本并不是最新的,如果不满足你的需求,还是看看下面的方法吧。,下载一个适合自己的系统的Linux Binaries 版,至于选择X64还是arm根据你的CPU决定。如果你的Linux系统有apt命令比如说Ubuntu系统,可以借助apt快速安装和卸载。比如说我这里下载的是Linux Binaries (x64)进入nodejs的官网。

2023-06-09 10:41:21 3395 3

原创 【Linux】wget常用命令

修改保存的文件名,如果该文件名包含了路径,则不会保存到-P参数的路径。批量下载,你可以把全部下载链接都写在一个文件里一个链接占一行。后台下载,下载信息保存到wget-log文件。直接下载到当前文件夹,保持默认文件名。设置重试次数和重试间隔时间,单位为秒。修改保存路径,路径不存在则自动创建。wget是一个很实用的下载工具。

2023-06-08 11:08:10 2731

原创 【Python】tkinter的简单使用(Tk对象、三大布局、变量、事件)

tkinter是Python自带的标准库,无需额外安装,如果你的Python没有tkinter,请检查你的Python是否标准版。place布局既可以绝对布局也可以相对布局,灵活性非常高,可以直接指定元素的x、y的坐标(原点为窗口或父容器左上角),注意,如果元素位置有重叠,则后布局的元素会盖住前布局的元素。tkinter的元素控件或窗口都可以调用bind()、unbind()绑定、解绑事件,第一个参数是事件的描述,第二个参数是要回调的函数名。是对事件的修饰,比如说需要的辅助按键,双击还是三击等。

2023-04-18 16:37:33 2860

原创 【Linux】Linux系统安装Python3和pip3

一般来说Linux会自带Python环境,可能是Python3或者Python2,可能有pip也可能没有pip,所以有时候需要自己安装指定的Python版本。Linux系统下的安装方式都大同小异,基本上都是下载安装包然后编译一下,再创建好软链接就行,下面分别以CentOS7和Ubuntu20.04进行演示。下载Python安装包,可以去Python的官网下载,也可以直接修改下面的链接的版本号,例如我这里下载的是Python-3.9.2,下载之后把它解压。编译源码,如果编程过程不出错就是ok的。

2023-03-01 17:04:13 4051 4

原创 【测试】Python手机自动化测试库uiautomator2和weditor的详细使用

我们之前在电脑操作手机进行自动化测试,基本上都是通过Appium的,这个工具确实强大,搭配谷歌官方的UiAutomator基本上可以完成各种测试,但缺点也很明显,配置环境太麻烦了,需要jdk、sdk等,后来有人在UiAutomator的基础上使用http请求rpc服务的方式做了一个uiautomator,但这个项目很久没有维护了,后面有人在此基础上进行重构和精简,所以又有了uiautomator2,这是目前为止比较好用的Python操作手机的测试库之一。如果看到一个漂亮的界面,可以选择截个图。

2023-02-27 17:10:50 6544 3

原创 【jQuery】js实现文件浏览功能

近期遇到一个浏览用户文件的需求,类似于访问百度网盘那样的列表,包含文件和文件夹,这个功能实现起来很简单,从服务器获取到的文件列表至少要有文件id、父级文件id、是否文件夹这三个字段前端排版看你实际情况设计,我这里只简单展示文件夹和文件夹以及对应的图表就行,文件时间等其他信息也可以自行展示。我这里使用table标签展示文件列表,每一个文件都是一个tr,效果如下3.展示文件列表样式设置好之后,我们先试着展示固定的文件,文件保存在一个数组中,每一个文件都有文件id,我这里使用文件路径代替,只要是唯一的就行,

2023-02-22 17:51:23 1773 3

原创 【Python】使用pyinstaller打包Python程序为EXE可执行程序

我们写出来的Python代码需要配合解释器才能执行,并不能像C、Java等语言一样编译成可执行程序,所以在没有安装Python环境的电脑上就不方便运行py代码,为了解决这个问题,我们可以借助pyinstaller、cx_Freeze、nuitka等工具对Python代码打包,它们的优缺点可以自行百度,我这里介绍一下pyinstaller的用法。如果你的项目并不只有一个.py文件,即存在自定义模块,那就不要使用-F参数打包成单一的可执行程序,否则可能会因为路径问题导致不能正常工作。全部参数使用默认设置。

2023-02-01 16:37:39 1399 2

原创 【Python】pysimplegui主动事件(多线程执行耗时任务解决主线程卡死问题)

默认情况下我们习惯在主线程更新UI,但是,一旦遇到耗时任务,界面就会卡住,甚至进入假死状态,Win系统会提示你“程序无响应”,这明显对用户很不友好,所以我们要考虑把耗时任务放在子线程执行,主线程就只管更新UI,保证主线程不会卡死。关于PySimpleGUI的基本使用,可以参考之前的文章,开启多线程的方式我们都学过,但问题是,在子线程里执行任务就变得不好与主线程交互了,比如说,想要把子线程里的执行进度更新到UI,这就需要子线程与主程序进行交互,即主线程需要拿到子线程的数据。

2023-01-11 11:51:09 2214

原创 【Python】asyncio的使用(async、await关键字)

我们可以使用asyncio创建协程,把同步任务变成异步任务很简单,我们在定义函数的时候在前面加上async修饰,在耗时任务那行代码使用await修饰,这时候调用函数,它就会返回一个协程(coroutine)对象,然后调用asyncio.run()把协程对象丢进去就能执行了。在调用执行的时候,需要创建一个事件循环,在事件循环里执行任务,这样它会在耗时的时候自动切换到其他任务。假设有一个任务test(),需要执行三次,每次分别休眠2秒、1秒、3秒,如果是同步执行,一共需要耗时6秒。

2023-01-04 15:42:42 3176

原创 【Python】占位符格式化输出

Python的格式化输出有好几种方式,比较常用的是%格式化、format()方法以及3.6版本支持的f-string,这三种格式化的用法这里不讲,这里主要讲一下控制占位符的格式,比如说输出长度、对齐方式。f-string其实与format()差不多,把变量名写在大括号里的冒号左边即可。可以把控制格式写在大括号里的冒号的右边。

2022-12-27 16:06:17 2078 1

原创 【Python】使用requests库实现多线程下载大文件

1.当我们请求下载文件的时候,可以使用head请求看一下该文件有多大,响应头里的“Content-Length”字段表示文件的字节数。使用使用requests库可以实现网络请求,但如果用于下载大文件,单线程下载确实不能很好地利用宽度,改为多线程会更好一点。2.拿到了文件大小之后,根据线程数划分为多个数据块,即每个线程都请求一部分,在请求头的“Range”字段指定下载范围。5.如果发现其中一个块下载失败了,那就相当于整个文件都失败了,不过我还是希望再尝试下载2次才确定失败。

2022-11-25 14:39:32 3645

原创 【Python】Python图形化界面库PySimpleGUI的简单使用

首先要实例化一个Window对象,表示一个界面窗口,但它的构造方法里有几十个参数,我们只指定前两个,分别是窗口标题和窗口布局,布局是一个列表,列表里是各种窗口控件,有了Window对象之后要使用死循环不断调用read()方法,主要作用是监听各种事件,我们通过事件名判断要执行上面代码,如果是关闭窗口则事件名是None,这时候跳出死循环之后调用Window对象的close()方法释放资源,然后程序正常结束就行。Text对象主要用于显示文本,Text对象构造方法的参数很多,但常用的不多。

2022-11-13 19:22:42 5793

原创 【系统】查看文件的md5值

查看md5可以确认文件是否被篡改或者是否下载完成,网上有很多小工具,但实际上系统自带的命令也能查看。

2022-11-08 17:37:49 5804 4

原创 【python】使用pycryptodome完成RSA非对称加密解密、签名验签

,原来能加密的字符串的长度与公私钥位数有关,max_lengt = (秘钥位数/8 - 11),比如说你的秘钥是1024位,那加密的字符串长度不能超过1024/8 - 11 = 117个。前面的做法是使用公钥加密、私钥解密,但还有一种比较常用的场景是使用私钥加密、公钥解密,这种做法的主要目的是对某些数据生成签名,使用公钥验证签名,判断数据是否被篡改。举个例子,如果我使用rsa1024的密钥,使用sha256算法,那被加密的明文长度最长是62,一旦超过62,那就会报。安装pycryptodome。

2022-11-08 17:28:00 2588 2

原创 【Linux】Linux镜像源地址换成国内源

像Ubuntu、kali等比较受欢迎的Linux发行版,因为都是国外的,所以默认的源也是国外的,在国内访问会比较慢(得不行),所以建议换成国内源吧,比较好用的国内源有清华源、阿里源、网易源等。

2022-11-04 16:15:16 1238

原创 【django】django-redis的使用方法

Django-redis默认的连接的类是DefaultClient,如果你有更高的定制需求,可以新建一个自己的类,继承ConnectionPool有了这个类之后还需要在Django的配置文件里指定它。

2022-11-02 18:11:55 6478

原创 【mysql】视图的创建、修改、删除、查看所有视图、不能修改视图的情况

视图的使用场景很多,比如说,你需要给某个用户提供某张表的访问权限,但又不能把所有字段都给他看,这时候我们可以创建一个视图,选取那张表或多张表的某些字段创建一个视图,然后把查看视图的权限开放给他即可达到保护数据安全的作用。要注意,因为视图并不真实存在,所以对视图的操作基本上就是对基本表的操作,比如说增加、删除、修改视图的数据,其实就是增删改基本表的数据。确定自己又创建视图的权限之后,可以使用下面的语句创建视图,注意视图类似于表,所以视图名必须是唯一存在的,不能与已有的表名或视图名重复。

2022-10-24 10:55:12 11706

原创 【小程序】微信小程序重复循环平移动画

虽然wx.createAnimation()能做的动画很多,但如果只是简单的垂直或水平方向上的平移动画,其实使用swiper组件也可以完成的,swiper从基础库1.0.0 开始支持。最先想到的是使用wx.createAnimation()API,它的好处是兼容性好,只要小程序基础库版本不低于1.9.6就可以正常工作。需求是让一张图片不断重复地从下往上移动,实现方法由多种,wx.createAnimation、关键帧动画、swiper等都能实现。

2022-10-18 13:03:06 1696

原创 【python】多线程下载m3u8分段视频

Windows系统自带的copy命令也可以合并,但是经过我测试,发现合并之后的视频可能会混乱,所以如果视频比较少,可以借助格式工厂等软件合并,如果较多,可以使用Python操作FFmpeg,但我这里没有实现。有些m3u8是加密的,但会在文件里给出秘钥的url,请求一下即可得到秘钥,秘钥一般是一个数字字母组成的字符串。m3u8一般是以m3u8结尾的文件,如果是浏览器,可以按一下F12打开DevTools进行抓包获取m3u8的完整链接,下载之后提取所有视频分段的uri,为了方便操作,我们可以使用m3u8库。

2022-10-17 17:23:42 2655

原创 【unity 】第一人称角色控制器手机虚拟双摇杆

首先新建一个image,改名为JoyStick-move(创建 image会自动创建一个Canvas),表示一个控制移动的摇杆,再建一个 image 子组件,改名为ViewPort,表示摇杆外面的圈圈,然后再建一个image孙子组件,改名为Content,表示摇杆里面的小圈圈,所以JoyStick-move、ViewPort、Content都是image。之后我们分别修改ViewPoint和Content的图片为摇杆应该有的样子,摇杆图片网上搜一下,或者自己用PS做一个 ,反正也就是两个圈圈。

2022-10-03 18:56:18 3846 13

原创 【js】点击让窗口抖动动画效果

比如说用户的未输入密码就点击登录按钮,则输入框会晃动一下提示用户需要输入,实现这种效果很简单,只需要给元素添加一个类,然后做一个关键帧动画即可。

2022-09-06 16:55:18 1262

原创 【系统】VMware虚拟机安装Windows11

分配的磁盘大小,默认是60G,但可能不够用,你可以分配多点,不用担心,它不会一下子就占用磁盘的,这个分配的磁盘大小相当于限制最大可以用多少磁盘,我这里只是用来测试的,分配80G就差不多了,然后勾选下面的“将虚拟磁盘存储为单个文件”,这可以提供磁盘的性能。给这台电脑命名,上面有写规则,你可以自己看看,尽量使用英文吧,不命名的话也可以直接跳过,命名的话点击“下一个”,然后它会自动重启电脑。然后再切换到“硬件选项”,点击下面的“添加”,选择“可信平台模块”,依次点击“完成”、“确定”即可关闭设置界面。...

2022-08-31 00:32:32 4917

原创 【shell】监控程序是否在挂掉

有时候程序在后台跑着跑着就挂掉了,我们可以通过grep去查找该进程,如果找不到那就说明挂掉了,也许你需要重启一下或者做一些其他的操作。

2022-08-22 17:57:16 596

原创 【系统】VMware虚拟机安装黑苹果系统macOS 12.5详细步骤

既然是虚拟机安装,你需要自己提前安装好VMware,我这里使用的是VMware16版本,安装包也可以在小程序里找到,VMware安装很简单,我这里就不演示了。选中下载好的Unlocker.exe,右键,以管理员身份运行,它会自动读取VMware的路径,如果读取不到,你可以手动指定,然后点击“Patch”,它会联网下载相关工具,所以你的电脑需要正常联网。等进度条加载完之后会让你选择语言,我这里选择中文,你根据自己的实际情况选择,选个外语也挺酷的,如果你看得懂的话。首先是国家,我们选择“中国大陆”

2022-08-09 12:11:12 40526 69

原创 【爬虫】scrapy创建运行爬虫、解析页面(嵌套url)、自定义中间件(设置UserAgent和代理IP)、自定义管道(保存到mysql)

如果你需要再访问新的链接,只需要生成一个新的Request交给调度器,Request对象有一个callback回调函数用于解析新的页面,当然也可以通过cb_kwargs参数把当前解析得到的数据传给回调函数,解析函数最后一定是yield一个Item。scrapy是一个快速、高层次的屏幕抓取和web抓取框架,我们只需要在乎怎么提取数据和保存数据,其他的都交给scrapy完成,所以比较快速高效,而且功能强大,很多东西都是可以自定义配置的。如果你把解析页面什么的都写好了可以使用下面的命令启动爬虫。......

2022-08-04 19:10:09 794

原创 【redis】发布和订阅消息

在Redis2版本之后支持发布订阅功能,发布者创建一个频道,并在上面发送消息,所有订阅该频道的客户端都能收到消息(不出意外的情况下,但实际不一定),发布订阅的好处是减少不必要的轮询,应用场景有即时聊天室、公众号订阅等。我们打开一个redis终端,使用subscribe命令订阅频道,你不妨多打开几个终端同时订阅同一个频道,比如说我这里打开两个终端都订阅叫做chatChannel的频道。Redis-server内部会维护一个字典,键是频道名,值是一个存储订阅者的链表,每次发布消息都会遍历该链表进行推送。...

2022-07-29 18:26:34 2201

原创 【mysql】mysql分别按年/月/日/周分组统计数据

我们可以使用date_format()函数格式化时间,然后进行分组操作例如有一个学生表,结构如下如果不想用date_format函数,可以使用对应的year()/month()/week()/day()函数替代date_format()需要传入一个特定的占位符,mysql常用的占位符可参考下表...

2022-07-13 17:30:17 4803

原创 【pypdf2】合并PDF、旋转、缩放、裁剪、加密解密、添加水印

比如说A4纸的大小是210毫米x297毫米,换成磅则是210 / (1 / 72 * 25.4) 约等于595.27磅,297 / (1 / 72 * 25.4) 约等于841.89磅。PageObject对象有一个rotate()方法对自身进行旋转,但是旋转角度取值是0、90、270、180等,即90的倍数,正数是顺时针,负数是逆时针。如果你需要合并某些文档的某些页面,可以通过merge()方法,主要指定位置、合并的文档、文档范围三个参数,即指定从哪个文档插入哪些页面到哪个位置。

2022-07-13 09:43:03 4732

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除