首页
在线工具
统计
友链
Search
1
暴力破解忘记的zip,rar, pdf等文件密码
2,069 阅读
2
typecho添加打赏功能
1,125 阅读
3
躲避校园网客户端的检测实现移动热点开启
1,106 阅读
4
创建自签名 ssl 证书
857 阅读
5
摸鱼人日历
849 阅读
随笔杂记
Web建设
运维茶点
编程之路
网络配置指南
Huawei
网络安全
资源下载
生活中的点滴
登录
Search
标签搜索
HCNA
Huawei
Linux
Python
web
Blog
windows
Network
PC
Docker
HCNP
LOVE
Virus
eNSP
DNS
typecho
MySQL
k8s
HTTPS
Security
TanHaX
累计撰写
71
篇文章
累计收到
58
条评论
首页
栏目
随笔杂记
Web建设
运维茶点
编程之路
网络配置指南
Huawei
网络安全
资源下载
生活中的点滴
页面
在线工具
统计
友链
搜索到
21
篇与
的结果
2024-05-28
安装H3C Cloud Lab 与 eNSP 共存
安装eNSP、H3C Cloud Lab、Wireshark和VirtualBox1. 安装 H3C Cloud Lab建议首先安装eNSP。2. 安装 Wireshark在安装 Wireshark 时,请确保勾选 WinPcap 安装选项。Wireshark 下载地址3. 安装VirtualBox下载VirtualBox 5.2 并安装。VirtualBox 5.2 下载地址3.1 修改注册表在进行 HCL 安装时,需要修改注册表编辑器的版本变量值为 6.0.14,以欺骗版本检测。使用管理员权限打开 CMD 终端,并运行以下命令:reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox" /v Version /t REG_SZ /d 6.0.14 /f reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox" /v VersionExt /t REG_SZ /d 6.0.14 /f4. 下载并安装H3C Cloud Lab下载 H3C Cloud Lab 并进行安装。H3C Cloud Lab 下载地址5. 将注册表改回安装完成后,将修改注册表编辑器的版本变量值修改回 5.2.44。使用管理员权限打开 CMD 终端,并运行以下命令:reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox" /v Version /t REG_SZ /d 5.2.44 /f reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox" /v VersionExt /t REG_SZ /d 5.2.44 /f
2024年05月28日
84 阅读
0 评论
2 点赞
2024-04-11
续上英语真题在线小突击
虽然这篇没有什么技术含量,但感觉这个功能还是有点用处,便来记录一下。继上一篇文章取消限制使用查询功能,这篇揪出了一个读音速度控制功能,废话不多直接上成果!{lamp/}这里涉及到 XPath 查询、修改元素属性、使用 MutationObserver 以及创建和添加按钮到页面。(function() { const xpath = '/html/body/div[2]/div[4]/div[1]/div/div[2]'; // 要修改的属性名 const attributeName = 'aria-hidden'; const node = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; // 初始状态为 false let attributeValue = 'false'; // 修改属性值函数 function toggleAttributeValue() { attributeValue = (attributeValue === 'false') ? 'true' : 'false'; node.setAttribute(attributeName, attributeValue); } // 创建 MutationObserver 实例 const observer = new MutationObserver((mutations) => { for (const mutation of mutations) { if (mutation.type === 'attributes' && mutation.attributeName === attributeName) { // 属性值被改回 true,重新改为 false if (node.getAttribute(attributeName) !== attributeValue) { node.setAttribute(attributeName, attributeValue); } } } }); // 启动 MutationObserver observer.observe(node, { attributes: true }); // 创建开关按钮 const toggleButton = document.createElement('button'); toggleButton.textContent = '读音速度开关'; toggleButton.style.position = 'fixed'; toggleButton.style.top = '50px'; toggleButton.style.right = '50px'; toggleButton.addEventListener('click', toggleAttributeValue); // 添加按钮到页面 document.body.appendChild(toggleButton); })();在这个脚本中,我们首先定义了一个 XPath 表达式来定位页面中的一个特定元素。然后,我们获取这个元素的引用,并定义了一个函数 toggleAttributeValue 来切换该元素的 aria-hidden 属性值。接着,我们创建了一个 MutationObserver 实例来监听该元素属性的变化。当 aria-hidden 属性的值发生变化时,如果它变回了 'true',我们将它重新设置为 'false'。这确保了我们始终控制该属性的值。最后,我们创建了一个按钮元素,并为其添加了一个点击事件监听器,该监听器在点击时调用 toggleAttributeValue 函数。这个按钮被添加到页面的 body 中,用户可以通过点击它来切换元素的 aria-hidden 属性。简单来说 aria-hidden 设置为 true,表示元素不能被屏幕阅读器读取;而如果设置为 false,则表示元素可以被屏幕阅读器读取。附上 greasyfork 脚本存储点。
2024年04月11日
109 阅读
0 评论
4 点赞
2024-04-03
黑豹X2 (PantherX2)刷机小笔记
最近在群里看到一位老表分享了一款黑豹X2设备,感觉性价比还不错,可以拿来搭建一个小型服务器。设备配置:CPU: 瑞芯微 rk3566 4核(Cortex-A55*4)RAM: 4GBROM: 32GB eMMC 5.1 存储USB2.0: ×1千兆网卡: ×1无线WIFI: 支持蓝牙: 支持TF卡扩展: 支持,同时有一个M-SATA的槽位(暂时无法直接替换使用,可能需要魔改或者单独驱动)。{lamp/}刷机步骤:1. 安装驱动与刷机程序.1.1 前往FireFly官网下载 RK3566 驱动文件与刷写工具。1.2 首先安装 DriverAssitant_v5.1.1 驱动包,并确保刷机软件(RKDevTool_Release_v2.84)中 Boot 和 system 的文件路径选择正确,请勿使用默认路径!!!注意:RKDevTool_Release 必须是 v2.84 版本的。如果不习惯英文界面,可在 config.ini 配置文件中将Selected=0修改为 Selected=1 重启程序后就会显示中文界面。2. 刷机镜像2.1 下载Armbian镜像和RK3566的LOADER文件。2.2 在设备未通电的情况下,按住 Reset 键,然后插入双USB头线。2.3 等待下方显示从 “没有发现设备” 转换到 ”发现一个LOADER设备“ 状态后,松开 Reset 键。然后选择镜像和 loader 文件。2.4 点击“高级功能”,进入 “进入Maskrom” 后设备会重启进入MASKROM模式。2.5 进入MASKROM模式,等待重启成功后再次回到”下载镜像“菜单,点击“执行”开始刷机。2.6 等待下载完成后,刷机结束,就可以移除USB线,再插入网线和电源线进行供电。3 初始化配置 Armbian初次登录设备一般通过DHCP获取IP,可以通过路由器后台查看设备IP地址。首次登录系统会提示输入默认的账户和密码,此时默认账户密码为root/ 1234。更改软件源,和安装部署其他系统方式。以下放了一个大佬编写的脚本可以快速部署。#!/bin/bash #彩色 red(){ echo -e "\033[31m\033[01m$1\033[0m" } green(){ echo -e "\033[32m\033[01m$1\033[0m" } yellow(){ echo -e "\033[33m\033[01m$1\033[0m" } blue(){ echo -e "\033[34m\033[01m$1\033[0m" } #获取本机IP function getip(){ lan=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(.\d+){3}') wan=$(curl -s https://myip.ipip.net/) date=$(date "+%Y-%m-%d %H:%M:%S") red "内网IP:$lan\n外网IP:$wan\n当前时间:$date" } #宝塔面板综合安装脚本 function bt(){ # 更新软件包列表 sudo apt update # 安装更新 sudo apt upgrade -y # 安装宝塔 wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh ed8484bec } #安装1Panel function 1panel(){ # 更新软件包列表 sudo apt update # 安装更新 sudo apt upgrade -y # 安装1Panel curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh } #安装CasaOS function casaos(){ # 更新软件包列表 sudo apt update # 安装更新 sudo apt upgrade -y # 安装CasaOS curl -fsSL https://get.casaos.io | sudo bash } #挂载TF卡 function tfcard(){ if grep -qs "/dev/mmcblk" /etc/fstab; then red "TF卡已经挂载,跳过挂载步骤。" else blue "TF卡未挂载,执行挂载操作。" # 挂载 TF 卡的选择提示 # 创建 TF 卡挂载目录 sudo mkdir -p /mnt/tfcard # 挂载 mmcblk0p1 设备到 /mnt/tfcard sudo mount /dev/mmcblk0p1 /mnt/tfcard # 将挂载信息添加到 /etc/fstab echo "/dev/mmcblk0p1 /mnt/tfcard auto defaults 0 0" | sudo tee -a /etc/fstab # 重新加载挂载 sudo mount -a red "已挂载TF卡到 /mnt/tfcard" fi } #切换中文 function chinese(){ # 修改时区为东八区上海 sudo timedatectl set-timezone Asia/Shanghai if [[ $(locale | grep LANG | cut -d= -f2) != "zh_CN.UTF-8" ]]; then # 修改系统语言为中文 sudo sed -i 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/g' /etc/locale.gen sudo locale-gen zh_CN.UTF-8 sudo update-locale LANG=zh_CN.UTF-8 LC_ALL= # 安装必要的软件包 sudo apt install apt-transport-https ca-certificates red "已更换为中文环境,即将重启,请稍后重新连接后再次执行代码。" sudo reboot exit fi } #更换 Armbian 的源为国内源 function change_source(){ sudo sed -i.bak 's#apt.armbian.com#mirrors.tuna.tsinghua.edu.cn/armbian#g' /etc/apt/sources.list.d/armbian.list sudo sed -i.bak 's#security.debian.org#mirrors.ustc.edu.cn/debian-security#g' /etc/apt/sources.list sudo sed -i.bak 's#deb.debian.org#mirrors.ustc.edu.cn#g' /etc/apt/sources.list sudo sed -i.bak 's#ports.ubuntu.com#mirrors.tuna.tsinghua.edu.cn/ubuntu-ports#g' /etc/apt/sources.list red "已更换源为国内源,即将进行更新检查。" # 更新软件包列表 sudo apt update # 安装更新 sudo apt upgrade -y } #宝塔面板 自动磁盘挂载工具 function btdisk(){ wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh && bash auto_disk.sh } #主菜单 function start_menu(){ clear if [ $(whoami) != "root" ];then echo "请使用root权限执行脚本命令!" exit 1; fi red "Armbian 初始化脚本 " echo " " blue "当前时间:$(date)" blue "当前系统:$(uname -srmo)" echo " " yellow " ==================================================" green " 1. 切换为中文环境" green " 2. 挂载 TF卡" green " 3. 切换为国内镜像源" green " 4. 获取本机IP" green " 5. 宝塔面板 自动磁盘挂载工具" green " 6. 安装 宝塔面板" green " 7. 安装 1Panel面板" green " 8. 安装 CasaOS面板" yellow " ==================================================" green " 0. 退出脚本" echo read -p "请输入数字:" menuNumberInput case "$menuNumberInput" in 1 ) chinese ;; 2 ) tfcard ;; 3 ) change_source ;; 4 ) getip ;; 5 ) btdisk ;; 6 ) bt ;; 7 ) 1panel ;; 8 ) casaos ;; 0 ) exit 1 ;; * ) clear red "请输入正确数字 !" start_menu ;; esac } start_menu "first"
2024年04月03日
386 阅读
1 评论
5 点赞
2024-03-23
英语真题在线小突击
发现一个有用的学习网站 🔜 英语真题在线 。话不多说直接润起来!{lamp/}1. 在网上发现一篇关于这个网站的文章,意外发现这个点可以修改循环次数数值达到无限制使用查询功能。这里主要是利用键值对,删除了该键后使用查询时会触发事件重新索引数据以达到无限制的查询。2. 在这里是直接用脚本自动在触发事件时删除 extra_data 数据 🔜 脚本部署地址注:需搭配油猴一起使用,如果没有安装该拓展可以在这里安装 🔜 官方地址
2024年03月23日
113 阅读
0 评论
3 点赞
2024-02-21
安装程序时出现“Windows要求已数字签名的驱动程序”的问题
在为客户安装公司产品时,经常会在旧版微软系统上遇到 “Windows要求已数字签名的驱动程序” 的问题。在这里记录一下解决方法:由于微软宣布将停止支持SHA-1签署的数字签名证书,改为使用SHA-2。但部分旧版微软系统本身并不支持SHA-2,这将导致在这些系统上,大量更新证书的软件无法正常使用。更新补丁 在微软官方网站下载并安装最新的补丁程序 KB976932,以确保系统能够支持最新的数字签名证书。使用火绒安全补丁工具 您还可以选择使用火绒官方推出的修复工具:火绒安全-SHA-2代码签名补丁修复工具,此工具可以解决数字签名相关的问题。
2024年02月21日
150 阅读
0 评论
1 点赞
2023-06-16
TanHaX-SPCWC
刚考完试闲得发慌写的。Smilinghan-SPCWC 是一个 Python 程序,允许用户监控计算机的系统状态并发送电子邮件通知。该程序使用 tkinter 库创建图形用户界面 (GUI),使用 smtplib 库发送电子邮件。还使用了其他库,如 socket、requests、datetime、pyautogui、threading、os、sys、time 和 ctypes。import tkinter as tk from tkinter import ttk import smtplib import socket import requests import datetime import pyautogui import threading import os import sys import time import ctypes from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage from email.header import Header USER32 = ctypes.windll.user32 SW_SHOW = 5 SW_HIDE = 0 class EmailChecker: def __init__(self): self.sent_email = False self.stop_event = threading.Event() self.thread = None self.root = tk.Tk() self.root.title("TanHaX-SPCWC") self.create_widgets() def create_widgets(self): mainframe = ttk.Frame(self.root, padding="20 10 20 10") mainframe.grid(column=0, row=0, sticky=(tk.N, tk.W, tk.E, tk.S)) mainframe.columnconfigure(0, weight=1) mainframe.rowconfigure(0, weight=1) email_entry = ttk.Entry(mainframe, width=30) email_entry.grid(column=1, row=0, sticky=(tk.W, tk.E)) email_label = ttk.Label(mainframe, text="Email:") email_label.grid(column=0, row=0, sticky=tk.E) submit_button = ttk.Button(mainframe, text="确定", command=lambda: self.submit_email(email_entry)) submit_button.grid(column=2, row=0, sticky=tk.W) start_button = ttk.Button(mainframe, text="开始检测", command=self.start_thread) start_button.grid(column=0, row=2, sticky=tk.W) stop_button = ttk.Button(mainframe, text="停止检测", command=self.stop_thread) stop_button.grid(column=2, row=2, sticky=tk.E) output_text = tk.Text(mainframe, height=10, width=50) output_text.grid(column=0, row=3, columnspan=3, sticky=(tk.W, tk.E)) for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5) email_entry.focus() self.root.bind('<Return>', lambda event: self.submit_email(email_entry)) self.output_text = output_text def submit_email(self, email_entry): email = email_entry.get() self.output_text.insert(tk.END, "接收的电子邮件: " + email + "\n") with open("emails.txt", "w") as f: f.write(email + "\n") email_entry.delete(0, tk.END) email_entry.insert(0, "") def send_email(self, subject, content, receiver): sender = 'smilinghan@qq.com' password = 'password' with open("emails.txt", "r") as f: receivers = [f.read().strip()] message = MIMEMultipart() message['Subject'] = Header(subject, 'utf-8') message['From'] = Header(sender) message['To'] = Header(receiver) text = MIMEText(content, 'html', 'utf-8') message.attach(text) screenshot = pyautogui.screenshot() if screenshot is not None: screenshot.save('screenshot.png') with open('screenshot.png', 'rb') as f: img = MIMEImage(f.read()) img.add_header('Content-ID', '<screenshot>') message.attach(img) try: smtpObj = smtplib.SMTP_SSL('smtp.qq.com', 465) smtpObj.login(sender, password) smtpObj.sendmail(sender, receivers, message.as_string()) self.output_text.insert(tk.END, "邮件发送成功\n") self.sent_email = True except Exception as e: self.output_text.insert(tk.END, "邮件发送失败\n") self.output_text.insert(tk.END, str(e) + "\n") self.sent_email = False def check_system(self, receiver): try: while not self.stop_event.is_set(): if USER32.GetForegroundWindow() != 0: hostname = socket.gethostname() ip_address = socket.gethostbyname(hostname) response_ip = requests.get("https://www.90th.cn/api/ip") if response_ip.status_code == 200: public_ip = response_ip.json()["ip"] address = response_ip.json()["address"] else: public_ip = "获取失败" address = "获取失败" login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") subject = '系统状况报告' content = f""" <html> <body> <h3>系统状况报告</h3> <p>主机名: {hostname}</p> <p>外网IP: {public_ip}</p> <p>内网IP: {ip_address}</p> <p>归属地: {address}</p> <p>发送时间: {login_time}</p> <p>登录状态: 成功</p> <p><img src="cid:screenshot"></p> </body> </html> """ if not self.sent_email: self.send_email(subject, content, receiver) self.sent_email = True time.sleep(5) else: time.sleep(1) self.sent_email = False self.output_text.insert(tk.END, "电脑未唤醒\n") except Exception as e: self.output_text.insert(tk.END, "Error: 无法检测电脑唤醒状态\n") self.output_text.insert(tk.END, str(e) + "\n") self.sent_email = False def start_thread(self): if self.thread is None or not self.thread.is_alive(): with open("emails.txt", "r") as f: receiver = f.read().strip() self.thread = threading.Thread(target=self.check_system, args=(receiver,), daemon=True) self.thread.start() self.output_text.insert(tk.END, "开始检测\n") def stop_thread(self): if self.thread is not None and self.thread.is_alive(): self.stop_event.set() self.thread.join(timeout=3) self.output_text.insert(tk.END, "停止检测\n") def run(self): if getattr(sys, 'frozen', False): os.chdir(sys._MEIPASS) self.root.protocol("WM_DELETE_WINDOW", self.stop_check) self.root.mainloop() def stop_check(self): if not self.stop_event.is_set(): self.stop_event.set() if self.thread is not None and self.thread.is_alive(): self.thread.join(timeout=3) self.stop_thread() self.root.destroy() self.root.quit() for t in threading.enumerate(): if t != threading.current_thread(): t.join(timeout=3) if __name__ == '__main__': checker = EmailChecker() checker.run(){lamp/}安装克隆存储库或下载文件。确保计算机上已安装 Python。运行以下命令安装所需的库:pip install -r requirements.txt使用打开命令提示符或终端,导航到文件所在的目录。运行以下命令启动程序:python email_checker.py程序将打开一个 GUI 窗口。在“电子邮件”字段中输入您的电子邮件地址,然后单击“确定”按钮。单击“开始检测”按钮以开始监控系统状态。如果计算机处于唤醒状态并正在使用,程序将每 5 秒发送一封包含系统信息和屏幕截图的电子邮件。如果计算机处于空闲或睡眠状态,程序将不会发送任何电子邮件。要停止监控,请单击“停止检测”按钮。注意事项该程序使用 邮件服务器发送电子邮件。请确保您拥有一个邮箱账户或者邮箱服务器,并在 send_email 方法中提供正确的电子邮件地址和密码。该程序将电子邮件地址保存在名为 "emails.txt" 的文件中。请确保该文件与程序位于同一目录中。该程序使用 pyautogui 库进行屏幕截图。请确保您已安装该库并具有进行屏幕截图的必要权限。该程序使用线程在后台运行监控过程。stop_event 用于在用户单击“停止检测”按钮时停止监控过程。程序将在 GUI 窗口中显示输出消息。
2023年06月16日
366 阅读
1 评论
9 点赞
2023-06-04
使用 pyi-set_version 为 Python EXE 文件添加版本信息的方法
在开发软件时,为了方便用户了解软件的版本信息,我们通常会在软件的可执行文件(EXE 文件)中添加版本号等信息。而在 Python 开发中,我们可以使用 pyi-set_version 工具来为 EXE 文件添加版本信息。1. 要使用 pyi-set_version ,您需要先安装PyInstaller。您可以使用pip来安装它。在命Windows 终端(cmd)中输入以下命令:pip install pyinstaller2. 准备我们的 本版内容文件 可以引荐我之前的发布的模板 从 PyInstaller-pyi-grab_version 生成的可执行文件中提取版本信息3. 我们需要在 Windows终端 中进入您要添加版本的程序目录下,执行以下命令操作:pyi-set_version file_version_info.txt yourprogramname.exe打开程序的属性在详细信息就可以查看我们添加的版本信息了。
2023年06月04日
493 阅读
1 评论
2 点赞
2023-06-04
从 PyInstaller-pyi-grab_version 生成的可执行文件中提取版本信息
1. 要使用pyi-grab_version,您需要先安装PyInstaller。您可以使用pip来安装它。在Windows 终端(cmd)中输入以下命令:pip install pyinstaller2. 我们需要在 Windows终端 中进入您要获取版本的程序目录下,执行以下命令操作。pyi-grab_version yourprogramname.exe3.当命令执行完成后,会在目录下生成一个file_version_info.txt名称的文件。# UTF-8 # # For more details about fixed file info 'ffi' see: # http://msdn.microsoft.com/en-us/library/ms646997.aspx VSVersionInfo( ffi=FixedFileInfo( # filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4) # Set not needed items to zero 0. filevers=(1, 0, 0, 0), prodvers=(1, 0, 0, 0), # Contains a bitmask that specifies the valid bits 'flags'r mask=0x16, # Contains a bitmask that specifies the Boolean attributes of the file. flags=0x0, # The operating system for which this file was designed. # 0x4 - NT and there is no need to change it. OS=0x40004, # The general type of file. # 0x1 - the file is an application. fileType=0x1, # The function of the file. # 0x0 - the function is not defined for this fileType subtype=0x0, # Creation date and time stamp. date=(0, 0) ), kids=[ StringFileInfo( [ StringTable( '080404b0', [StringStruct('CompanyName', 'Smilinghan'), StringStruct('FileDescription', 'Smilinghan-PC'), StringStruct('FileVersion', '1.0.0.0'), StringStruct('InternalName', 'Smilinghan-PC.exe'), StringStruct('LegalCopyright', 'Copyright (C) 2023-2023 by Smilinghan (nihaotang.com)'), StringStruct('OriginalFilename', 'Smilinghan-PC'), StringStruct('ProductName', 'Smilinghan-PC'), StringStruct('ProductVersion', '1.0.0.0')]) ]), VarFileInfo([VarStruct('Translation', [2050, 1000])]) ] )
2023年06月04日
403 阅读
0 评论
1 点赞
2023-05-16
Vim编辑器基本知识
一、Vim的基本知识Vim有三种不同的模式:命令模式(Command mode):启动Vim默认进入的模式,在该模式下可以运行vim命令进行文本编辑。插入模式(Insert mode):在该模式下可以输入文本,按i/a/o等命令进入。视图模式(View mode):从命令模式按v/V/ Ctrl+v等命令进入,可以选择文本块。使用esc键可以从插入模式和视图模式返回命令模式。二、快捷键键作用h(←)向左移动j(↓)向下移动k(↑)向上移动l(→)向右移动w向前移动到下一个单词首字母b向后移动到上一个单词首字母$移动到行尾0移动到行首gg跳到文件首行G跳到文件尾行Ctrl+f向下翻页Ctrl+b向上翻页/pattern搜索pattern?pattern搜索pattern (向上搜索)n跳到搜索的下一个匹配项N跳到搜索的上一个匹配项:%s/old/new/g替换文件中的所有old为new三、常用命令1. 文件操作命令说明i在光标前插入文本I在当前行首插入文本a在光标后插入文本A在当前行尾插入文本o在当前行之下插入新行O在当前行之上插入新行dw删除从光标处开始的一个单词5dw删除从光标处开始的5个单词dd删除当前行5dd删除当前行以下的5行cc修改当前行u撤销上一步操作.重复上一步操作2. 编辑操作命令说明i在光标前插入文本a在光标后插入文本o在当前行之下插入新行O在当前行之上插入新行dw删除从光标处开始的一个单词5dw删除从光标处开始的5个单词dd删除当前行5dd删除当前行以下的5行u撤销上一步操作.重复上一步操作3. 视图操作命令说明v开始字符视图模式V开始行视图模式Ctrl+v开始块视图模式y复制选中文本d剪切选中文本p粘贴文本4. 其他常用命令命令说明/pattern搜索pattern?pattern搜索pattern (向上搜索)n跳到搜索的下一个匹配项N跳到搜索的上一个匹配项gg跳到文件首行G跳到文件尾行50%跳到文件中点行:nohlsearch取消搜索高亮四、高级编辑功能多窗口编辑:Vim可以同时打开多个文件窗口,使用:sp命令分隔窗口,Ctrl+w+w切换窗口。代码折叠:通过设置foldmethod和foldlevel选项可以实现代码折叠功能。zR展开所有折叠,zA折叠所有。宏录制:使用qa开始录制宏,q结束录制。@a运行宏a。标签跳转:通过ctag可以生成标签,使用Ctrl+]跳转到光标处标签的定义,Ctrl+t返回。括号匹配:使用%可以找出光标处括号的匹配项。编辑器定制:Vim集成有强大的自定义功能,通过编辑vimrc文件可以定制Vim环境。
2023年05月16日
270 阅读
0 评论
5 点赞
2023-05-11
爬取图片
爬取星巴克图片但是后面无法下载!from bs4 import BeautifulSoup import urllib.request import os url = 'https://www.starbucks.com.cn/menu/' try: response = urllib.request.urlopen(url) except: print("Error: 无法检索到 URL") exit() content = response.read().decode('utf-8') soup = BeautifulSoup(content, 'lxml') image_list = [(a.find('div', class_='preview')['style'].split('url("')[1].split('")')[0], a.find('strong').text) for a in soup.find_all('a', class_='thumbnail')] folder_path = os.path.join(os.getcwd(), "starbucks") if not os.path.isdir(folder_path): os.makedirs(folder_path) for url, name in image_list: try: urllib.request.urlretrieve(url="https://www.starbucks.com.cn" + url, filename=os.path.join(folder_path, name + '.jpg')) except: print(f"Error: 无法检索到 {name}")
2023年05月11日
309 阅读
2 评论
3 点赞
1
2
3