月度归档:2025年05月

Proxmox VE环境,运行一个原版openwrt的虚拟机

前缀、文档修改记录

20250522 初始化编辑此文章,完稿
20250803 更新文章,镜像版本24.10.2
20250804 更新Y2B视频讲解,PVE中创建1个Openwrt虚拟机,能通网络
20250805 更新文章,增加语言,源等配置 

章节1、需求描述

一个独立的PVE环境,最常见的all in one玩法,PVE中,是需要一个路由器系统的,优先选择openwrt作为路由器系统。

章节2、测试环境

PVE 8.1.4   // 这个不是最新版本的,不过没事
Openwrt 24.10.2 x86-64    // 这个是最新版本

章节3、 镜像文件

openwrt镜像文件下载,新版本的pve基本都是使用UEFI启动,优先下载使用 EFI 启动的openwrt镜像。 24.10.2 Tag-2025-8-3时间最新的版本

文件系统类型(ext4 vs squashfs)、是否支持 UEFI 启动,以及是否是 完整系统(combined) 或只是 根文件系统(rootfs)

https://downloads.openwrt.org/releases/24.10.2/targets/x86/64/openwrt-24.10.2-x86-64-generic-ext4-combined.img.gz

factory:用于硬件首次刷机
sysupgrade:用于升级现有 OpenWrt
combined.img(如 SquashFS):适合虚拟机或 USB 安装 

章节4、上传镜像

将gz格式的镜像解压缩为.img格式,然后,点PVE页面的上传按钮,进行文件上传

可以观察到文件在PVE中的位置 /var/lib/vz/template/iso/openwrt-24.10.2-x86-64-generic-ext4-combined.img

章节5、创建openwrt虚拟机

这里可以通过qm命令或者网页常规方式,创建一个无磁盘的虚拟机。

创建虚拟机 / 名称 OpenWRT

操作系统 / 不使用任何介质

系统 / 全部默认

磁盘 / 删掉默认,空白

核心 / KVM64 或者 host, +AES

内存 / 512MB ~ 2048MB

网卡 / virtio

章节6、 导入系统的img

qm importdisk $VMID /var/lib/vz/template/openwrt-*.img local-zfs

其中 $VMID,我这里是100,你们根据实际的填

执行命令为:
qm importdisk 102 /var/lib/vz/template/iso/openwrt-24.10.2-x86-64-generic-ext4-combined.img local-zfs

导入成功后,会出现“未使用的磁盘0”

双击未使用的磁盘,点击“添加”,并调整大小,增加10G的磁盘容量

并在 “选项”,”引导顺序” ,将刚刚增加的磁盘vm-100-disk-0拉到最上,让它“启用”,为第一优先级的引导

做完后,我一般直接把这台虚拟机转换为模板,这样方便后期的调试,按这个模板,创建各种测试用途的openwrt虚拟机。模板上右击,选择克隆,模式(完整),名称(自定义一个新名字)即可。

章节7、Openwrt地址段修改

修改文件 /etc/config/network ,我这里只有1个网卡,默认为LAN,如果需要WAN,可在控制台再增加一个网卡口,用于WAN的上联。

章节8、网页登录,修改网卡的配置参数

因为主路由开了DHCP SERVER,这个就关闭DHCP SERVER;

指定网关到当前网络的主路由IP

指定DNS到当前网络的主路由IP

(可选)我这里旁路由用,关闭IPv6

章节9、配置Openwrt的国内镜像源

网页登录Openwrt,系统System,软件Software,选择Configure opkg,修改 /etc/opkg/distfeeds.conf 中的内容

国内的源很多,一般清华,阿里,中科大……,这个你们随意选择。

//  原参数
src/gz openwrt_core https://downloads.openwrt.org/releases/24.10.2/targets/x86/64/packages
src/gz openwrt_base https://downloads.openwrt.org/releases/24.10.2/packages/x86_64/base
src/gz openwrt_kmods https://downloads.openwrt.org/releases/24.10.2/targets/x86/64/kmods/6.6.93-1-1745ebad77278f5cdc8330d17a3f43d6
src/gz openwrt_luci https://downloads.openwrt.org/releases/24.10.2/packages/x86_64/luci
src/gz openwrt_packages https://downloads.openwrt.org/releases/24.10.2/packages/x86_64/packages
src/gz openwrt_routing https://downloads.openwrt.org/releases/24.10.2/packages/x86_64/routing
src/gz openwrt_telephony https://downloads.openwrt.org/releases/24.10.2/packages/x86_64/telephony


// 更新参数,清华大学源
src/gz openwrt_core https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/targets/x86/64/packages
src/gz openwrt_base https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/packages/x86_64/base
src/gz openwrt_kmods https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/targets/x86/64/kmods/6.6.93-1-1745ebad77278f5cdc8330d17a3f43d6
src/gz openwrt_luci https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/packages/x86_64/luci
src/gz openwrt_packages https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/packages/x86_64/packages
src/gz openwrt_routing https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/packages/x86_64/routing
src/gz openwrt_telephony https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.2/packages/x86_64/telephony

配置完源,点击update lists,更新即可。

章节10、配置中文语言包

在输入框Filter 这里搜索 zh-cn

在luci-i18n-base-zh-cn 下载并安装,安装完成,刷新页面,应该就是中文了。

章节11、扩容/分区

系统默认的存储空间也就120MB总大小,我前面分配了16G的容量,没有充分用上,本章节讲解如何扩容/分区空间

原来各路径的容量信息:

下面参照官方的操作指引,更新扩容分区

https://openwrt.org/docs/guide-user/advanced/expand_root

如下都为命令行操作,先安装必要的软件

#注释 Install packages  安装必要的软件
root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install parted losetup resize2fs blkid unzip
 
#注释 Download expand-root.sh 下载官方的脚本代码,其中这个可选用电脑下载好后,手工上传到openwrt系统
root@OpenWrt:~# wget -U "" -O expand-root.sh "https://openwrt.org/_export/code/docs/guide-user/advanced/expand_root?codeblock=0"
 
#注释 运行脚本Source the script (自动生成 /etc/uci-defaults/70-rootpt-resize and /etc/uci-defaults/80-rootpt-resize, and adds them to /etc/sysupgrade.conf so they will be re-run after a sysupgrade)
root@OpenWrt:~# . ./expand-root.sh

#注释 执行分区扩容,并自动重启Resize root partition and filesystem (will resize partiton, reboot resize filesystem, and reboot again)
root@OpenWrt:~# sh /etc/uci-defaults/70-rootpt-resize
如果为M.2的NVMe的盘,因为实际为ext4文件系统,且没有必要全部容量扩进/分区,实际执行命令如下,增加16GB容量到/分区即可:
opkg update
opkg install parted losetup resize2fs blkid unzip lsblk losetup
parted -s /dev/nvme0n1 resizepart 2 16GB
losetup -a
losetup /dev/loop0 /dev/nvme0n1p2
resize2fs -f /dev/loop0
reboot

或者如果为2.5英寸的SSD盘
opkg update
opkg install parted losetup resize2fs blkid unzip lsblk losetup
parted -s /dev/sda resizepart 2 30GB
losetup -a
losetup /dev/loop0 /dev/sda2
resize2fs -f /dev/loop0
reboot

再次登录Openwrt,命令 df -h ,看到Available容量为~16GB,表示扩容完成。

章节12、安装软件 Passwall

必要的依赖软件

root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install coreutils 
root@OpenWrt:~# opkg install coreutils-base64
root@OpenWrt:~# opkg install coreutils-nohup
root@OpenWrt:~# opkg install curl
root@OpenWrt:~# opkg install ip-full
root@OpenWrt:~# opkg install libuci-lua
root@OpenWrt:~# opkg install lua
root@OpenWrt:~# opkg install luci-compat
root@OpenWrt:~# opkg install luci-lib-jsonc
root@OpenWrt:~# opkg install resolveip

去这里,搞一份文件,https://github.com/xiaorouji/openwrt-passwall/releases

本次2025-8-5下载的版本,25.8.5-1,根据各自的CPU架构&Openwrt版本,我这里要x86-64下载语言包和软件包

https://github.com/xiaorouji/openwrt-passwall/releases/download/25.8.5-1/luci-24.10_luci-app-passwall_25.8.5-r1_all.ipk

https://github.com/xiaorouji/openwrt-passwall/releases/download/25.8.5-1/luci-24.10_luci-i18n-passwall-zh-cn_25.216.51224.3ce0762_all.ipk

https://github.com/xiaorouji/openwrt-passwall/releases/download/25.8.5-1/passwall_packages_ipk_x86_64.zip

root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg unzip
root@OpenWrt:~# unzip passwall_packages_ipk_x86_64.zip
// 依次安装如下
root@OpenWrt:# opkg install chinadns-ng_2025.06.20-r1_x86_64.ipk
root@OpenWrt:# opkg install dns2socks_2.1-r2_x86_64.ipk
root@OpenWrt:# opkg install geoview_0.1.10-r1_x86_64.ipk
root@OpenWrt:# opkg install hysteria_2.6.2-r1_x86_64.ipk 
root@OpenWrt:# opkg install ipt2socks_1.1.4-r3_x86_64.ipk
root@OpenWrt:# opkg install microsocks_1.0.5-r1_x86_64.ipk
root@OpenWrt:# opkg install naiveproxy_138.0.7204.35-r1_x86_64.ipk
root@OpenWrt:# opkg install shadow-tls_0.2.25-r1_x86_64.ipk
root@OpenWrt:# opkg install shadowsocks-rust-sslocal_1.23.5-r1_x86_64.ipk
root@OpenWrt:# opkg install shadowsocks-rust-ssserver_1.23.5-r1_x86_64.ipk  // 一般不需要安装
root@OpenWrt:# opkg install shadowsocksr-libev-ssr-local_2.5.6-r11_x86_64.ipk
root@OpenWrt:# opkg install shadowsocksr-libev-ssr-redir_2.5.6-r11_x86_64.ipk
root@OpenWrt:# opkg install shadowsocksr-libev-ssr-server_2.5.6-r11_x86_64.ipk  // 一般不需要安装
root@OpenWrt:# opkg install simple-obfs_0.0.5-r1_x86_64.ipk
root@OpenWrt:# opkg install sing-box_1.11.15-r1_x86_64.ipk
root@OpenWrt:# opkg install tcping_0.3-r1_x86_64.ipk
root@OpenWrt:# opkg install trojan-plus_10.0.3-r2_x86_64.ipk
root@OpenWrt:# opkg install tuic-client_1.0.0-r1_x86_64.ipk
root@OpenWrt:# opkg install v2ray-geoip_202507310022.1_all.ipk
root@OpenWrt:# opkg install v2ray-geosite_202507302215.1_all.ipk
root@OpenWrt:# opkg install v2ray-plugin_5.37.0-r1_x86_64.ipk
root@OpenWrt:# opkg install xray-core_25.7.26-r1_x86_64.ipk
root@OpenWrt:# opkg install xray-plugin_1.8.24-r1_x86_64.ipk
// 安装完各软件后,再安装这俩
root@OpenWrt:# opkg install luci-24.10_luci-app-passwall_25.8.1-r1_all.ipk
root@OpenWrt:# opkg install luci-24.10_luci-i18n-passwall-zh-cn_25.213.59897.f0cc846_all.ipk
2025-08-05 02:23:01: 系统未安装iptables或ipset或Dnsmasq没有开启ipset支持,无法使用iptables+ipset透明代理!
2025-08-05 02:23:01: 透明代理基础依赖 kmod-nft-socket 未安装...
2025-08-05 02:23:01: 透明代理基础依赖 kmod-nft-tproxy 未安装...
2025-08-05 02:23:01: 运行完成!

把缺的这俩在软件包里搜索安装,并重启一下即可。
删除 dnsmasq
安装 iptables-nft kmod-nft-socket kmod-nft-tproxy dnsmasq-full
并修改 passwall/高级设置/转发设置/防火墙/nftables

~ ~~~~~~~ 分割线 ~ ~~~~~~~

附录0、离线安装软件 fdisk

软件1、fdisk

//   terminfo_6.4-r2_x86_64.ipk
opkg install terminfo_*.ipk   
//   libncurses-dev_6.4-r2_x86_64.ipk  libncurses6_6.4-r2_x86_64.ipk  
opkg install libncurses6_*.ipk
//   fdisk_2.40.2-r1_x86_64.ipk
opkg install fdisk_*.ipk

软件2、resize2fs

//   resize2fs_1.47.0-r2_x86_64.ipk
opkg install resize2fs*.ipk

软件3、blkid

//   blkid_2.40.2-r1_x86_64.ipk      libblkid1_2.40.2-r1_x86_64.ipk
opkg install *blkid*.ipk

软件4、lsblk

//   libmount1_2.40.2-r1_x86_64.ipk lsblk_2.40.2-r1_x86_64.ipk
root@Router:~# opkg install libmount1_2.40.2-r1_x86_64.ipk
Installing libmount1 (2.40.2-r1) to root...
Configuring libmount1.
root@Router:~# opkg install lsblk_2.40.2-r1_x86_64.ipk
Installing lsblk (2.40.2-r1) to root...
Configuring lsblk.
root@Router:~# 

软件5、e2fs

root@Router:~# opkg install e2fsprogs_1.47.0-r2_x86_64.ipk 
Package e2fsprogs (1.47.0-r2) installed in root is up to date.
root@Router:~# 

附录1、视频操作演示

章节1-8,初始化1个openwrt虚拟机

000161. Proxmox VE环境,安装原版Openwrt系统 2025-08-04

本期博客地址 https://dasmz.com/?p=4625
本期视频地址 https://youtu.be/iqgECX1cGQw

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

Debian/Ubuntu系统,使用国内源安装docker-ce

前缀、文档修改记录

20250520 初始化编辑此文章,完稿

章节1、需求描述

国内服务器,懒得挂代理,想了想应该还是可以通过国内源来安装docker-ce的,本篇就实际来跑通一遍安装流程。

测试机的系统是 Debian 10 64位,国内服务器

章节2、操作步骤

2.1 卸载旧版本的docker-ce

此步骤需要慎重,先确认是否有运行的docker镜像,或者相关数据

apt remove docker docker-engine docker.io containerd runc

2.2 更新 APT 缓存

apt update
apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

2.3 添加Docker的官方GPG密钥

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | apt-key add -

2.4 设置阿里云的 Docker 软件源

add-apt-repository \
   "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/debian \
   $(lsb_release -cs) \
   stable"

2.5 安装 Docker CE

apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io

本次测试环境安装到的版本 26.1.4-1~debian.10~buster Tag-20250520-2233

2.6 测试是否安装成功

root@debian:/# docker version
Client: Docker Engine - Community
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.21.11
 Git commit:        5650f9b
 Built:             Wed Jun  5 11:29:15 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.1.4
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       de5c9cf
  Built:            Wed Jun  5 11:29:15 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.33
  GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
root@debian:/# 

2.7 HelloWorld

配置镜像加速,因国家政策相关原因,国内已经收紧了docker镜像服务的提供,阿里云的镜像加速,也仅限其自身或者制品中心内的镜像,已经没啥用了。我研究了一下,要么自己部署私有镜像仓库,或者镜像加速,要么直接加速到docker.io官方地址,这个破世道。

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

在这个页面,加速器地址这里,可以看到你私有的加速地址,恩,勿在公网公开。将下面registry.cn-hangzhou.aliyuncs.com 换成你私有的加速地址。

mkdir -p /etc/docker
cat << EOF | tee /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]
}
EOF

docker info | grep -i mirror     // 查看镜像是否生效,输出中包含配置的加速器地址,说明配置成功
阿里ACR变更内容
调整镜像加速器功能的使用范围:

仅限阿里云用户,在支持公网访问的阿里云产品上使用该镜像加速能力。

仅支持通过镜像加速器拉取限定范围内的容器镜像。
docker run hello-world

最终通过使用 tsocks 或 proxychains 转发流量,完成任务。

2.8 重启docker相关服务

systemctl daemon-reload
systemctl restart docker
systemctl enable docker     // 开机自动启动

附录1、视频操作演示

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨

Debian 12系统下,安装chrome浏览器,安装chrome driver

前缀、文档修改记录

20250509 初始化编辑此文章,完稿

章节1、需求描述

Debian 12系统下,安装chrome浏览器,配套安装chrome driver,以便用程序来驱动Chrome浏览器

章节2、操作步骤

2.1、安装必要的工具

root@server:~# apt update
root@server:~# apt install wget curl unzip

2.2、下载Chrome浏览器

root@server:~# mkdir -p /root/src

root@server:~# cd /root/src

root@server:~# wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  // 从 Google 官方下载安装包

2.3、安装Chrome浏览器

使用 dpkg 安装,如果有依赖问题,再用 apt 修复即可

root@server:~#  cd /root/src/

root@server:~#  dpkg -i google-chrome-stable_current_amd64.deb
  // 本次安装到的版本是136.0.7103.92-1 Tag-2025-5-9

root@server:~#  apt --fix-broken install -y
  // 执行路径 /usr/bin/google-chrome

确认版本信息

root@server:~#  /usr/bin/google-chrome -version
Google Chrome 136.0.7103.92  

// Tag-2025-5-9 输出版本号,说明安装成功

2.4、下载和安装 ChromeDriver

ChromeDriver 版本需要和 Chrome 浏览器版本对应,所以,刚刚安装的Chrome版本务必记录下来。

低于115的版本的官方地址 https://chromedriver.chromium.org/downloads

https://developer.chrome.com/docs/chromedriver/downloads

图/官方提示:

高于115或者更新版本的官方地址 https://googlechromelabs.github.io/chrome-for-testing/

下载其中chromedriver的linux64版本即可,https://storage.googleapis.com/chrome-for-testing-public/136.0.7103.92/linux64/chromedriver-linux64.zip

root@server:~#  cd /root/src/

root@server:~#  wget https://storage.googleapis.com/chrome-for-testing-public/136.0.7103.92/linux64/chromedriver-linux64.zip
  // 版本编号要跟Chrome浏览器的一致


root@server:~# unzip chromedriver-linux64.zip
Archive:  chromedriver-linux64.zip
  inflating: chromedriver-linux64/LICENSE.chromedriver  
  inflating: chromedriver-linux64/THIRD_PARTY_NOTICES.chromedriver  
  inflating: chromedriver-linux64/chromedriver  
root@server:~#  

root@server:~# mv chromedriver-linux64/chromedriver /usr/bin/chromedriver
root@server:~# chmod +x /usr/bin/chromedriver
  // 挪目录,赋权限

root@server:~# chromedriver --version
  // 确认版本号,显示就是正常的,务必跟Chrome版本一致

章节3、测试代码

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# by Dasmz
# 2025-5-9
# 
import time
import random
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

CHROMEDRIVER_PATH = '/usr/bin/chromedriver'
SCREENSHOT_PATH = '/var/www/html/ScreenShot.png'

URL_LIST = ['URL1','URL2','URL3','URL4','URL5'...]

def getNow():
    now = datetime.now()
    return now.strftime("%Y-%m-%d %H:%M:%S")
    
def create_driver(user_agent):
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')  # 无界面模式
    chrome_options.add_argument("--window-size=1920x1080")  # 窗口大小
    chrome_options.add_argument('--disable-gpu')   # 关闭GPU加速
    chrome_options.add_argument("--mute-audio")   # 关闭声音
    chrome_options.add_argument("--no-sandbox")   # 无沙箱
    chrome_options.add_argument("--disable-dev-shm-usage")  # 不使用/dev/shm共享内存目录
    chrome_options.add_argument("--disable-extensions")   # 关闭扩展程序
    chrome_options.add_argument("--log-level=3")   # 只显示致命错误FATAL
    chrome_options.add_argument('--disable-application-cache')   # 关闭 Chrome 的应用缓存,包括页面缓存、离线缓存
    chrome_options.add_argument('--incognito')   # 隐身模式,每次打开网页都是新会话,不会用缓存、也不会保存 cookie
    chrome_options.add_argument('--disk-cache-size=0')   # 磁盘缓存设为 0 字节
    chrome_options.add_argument(f"--user-agent={user_agent}")
    
    # 禁止图片加载
    # prefs = {"profile.managed_default_content_settings.images": 2}
    # chrome_options.add_experimental_option("prefs", prefs)
    
    driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=chrome_options)
    driver.set_window_size(1920, 1080)   # 设置分辨率 (宽, 高)
    return driver

def run_chrome(driver, url):
    try:
        driver.get(url)
        # 等待 body 元素加载完成
        time.sleep(1.5)  # 给浏览器的网页加载的时间
        WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, 'body')))
        
        print(f"标题: {driver.title}")
        print(f"URL: {driver.current_url}")
        # print(f"页面源码长度: {len(driver.page_source)}")
        
        # 网页加载情况截图
        driver.save_screenshot(SCREENSHOT_PATH)
    except Exception as e:
        print(f"出错: {e}")

def go2web(driver):
    try:
        target_url = random.choice(URL_LIST)
        run_chrome(driver, target_url)
    except Exception as e:
        print(f"访问出错: {e}")

if __name__ == '__main__':
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36'
    
    driver = create_driver(user_agent)
    
    try:
        for i in range(1, 40000000):
            print(f"\n\n第 {i} 次访问 {getNow()}")
            go2web(driver)
            # time.sleep(1)  # 可调整等待时间
    except KeyboardInterrupt:
        print("手动中断")
    finally:
        driver.quit()

附录1、视频操作演示

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨