python 爬虫 入门 六、Selenium
Selenium本来是一个自动测试工具,用于模拟用户对网站进行操作。在爬虫领域也有其用处。
一、下载安装Selenium及附属插件
pip install Selenium
安装完成后还需要安装一个浏览器驱动,来让python能启动浏览器。
如果是Edge或者其他基于Chromium的浏览器(如下面的百分浏览器),我们先查看Chromium版本号:

这里以Edge为例,版本为126.0.2592.68,进入下面的网址,咱们就选最后一个,win版本,解压之后的exe文件就是我们需要的东西,你可以把它放在python解释器目录,项目目录或者其他你找得到的地方。
chromedriver.storage.googleapis.com/index.html



二、selenium的使用
(一)、第一个程序
先来试试第一个程序,它会使用edge打开百度(第一打开时间可能有点长(10s?),并且打开后不久就会自动关闭)然后输出抬头的数据:
import timefrom selenium.webdriver import Edge # Edge 可以换成 Chrome/Firefox(火狐)/Ie/BlackBerry······url = 'http://www.baidu.com'
web = Edge()
web.get(url)
print(web.title)
time.sleep(50)
(二)、以站酷为例
接下来,我们尝试模拟一下从站酷ZCOOL-设计师互动平台-打开站酷,发现更好的设计!中搜索"网站设计",并打开第一个和第二个文章的全过程
在selenium中,我们所有操作,看到的都是已经经过js处理过的页面,也就是说,他是所见即所得。以站酷为例,站酷首页的文章都是二次请求得到的,源代码中没有,用以下代码就能清楚看到。会输出True False,如果不是的话,尝试更改文章名或者延长time.sleep时间,以保证网站完全加载。
import timeimport requests
from selenium.webdriver import Edge # Edge 可以换成 Chrome/Firefox(火狐)/Ie/BlackBerry······headers = {# 用户代理,某些网站验证用户代理,微微改一下,如果提示要验证码之类的,使用它"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome""/118.0.0.0 Safari/537.36",
}url = 'https://www.zcool.com.cn/'
web = Edge()
web.get(url)
# print(web.page_source)
time.sleep(8)
print('字体合集' in web.page_source) # 字体合集是一个文章名
with requests.get(url=url, headers=headers) as resp:resp.encoding = "utf-8" # 当页面乱码改这里# print(resp.text)print('字体合集' in resp.text)# 字体合集是一个文章名
需要模拟的行为流程


模拟代码
通过以下代码即可获取所需内容:通常来说,人怎么想,就怎么用selenium访问页面。
import timefrom selenium.webdriver import Edge # Edge 可以换成 Chrome/Firefox(火狐)/Ie/BlackBerry······
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keysurl = 'https://www.zcool.com.cn/'
web = Edge()
web.get(url)
time.sleep(3) # 等几秒使得网站完全加载
# 已经进入网站,找到搜索框,输入数据并回车搜索。
# By有By.ID、By.NAME、By.XPATH、By.CSS_SELECTOR等
search_box = web.find_element(By.XPATH, '//*[@id="headerSearchInput"]') # 直接通过检查元素中的xpath获得位置
search_box.send_keys("网站设计")
# 方法一、点击搜索,
# search = web.find_element(By.CLASS_NAME, '_search-icon_1wwm7_457')
# search.click()
# 方法二,按下回车,也可以直接放一块:search_box.send_keys("网站设计",Keys.ENTER)
search_box.send_keys(Keys.ENTER)
time.sleep(3)
# 打开两个文章
img = web.find_element(By.XPATH, '//*[@id="__next"]/main/div/div/div[2]/section[2]/section/section/div[1]/div[1]')
img.click()
img = web.find_element(By.XPATH, '//*[@id="__next"]/main/div/div/div[2]/section[2]/section/section/div[2]/div[1]')
img.click()
time.sleep(2)
# 遇到不能按F12打开控制台和没有右键菜单的情况,应该是拦截了快捷键,点击地址栏然后按F12即可
# 切换窗口获得所需内容
web.switch_to.window(web.window_handles[1])
text = web.find_element(By.XPATH, '//*[@id="__next"]/main/div/section/div[1]')
print(text.text)
web.switch_to.window(web.window_handles[2])
text = web.find_element(By.XPATH, '//*[@id="__next"]/main/div/section/div[1]')
print(text.text)
(三)、其他代码
selenium不太适合做能长久使用的脚本,但短时间内用一两次还是可以的,下面是一些以后可能用到的函数示例
from selenium.webdriver import Edge # Edge 可以换成 Chrome/Firefox(火狐)/Ie/BlackBerry······
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWaitopt = Options()
opt.add_argument("--disable-blink-features=AutomationControlled") # 防止服务器知道是selenium打开的。url = 'https://www.zhihu.com/'
web = Edge(options=opt)
web.get(url)
web.implicitly_wait(10) # 隐式等待,接下来所有的查找都至少等10s,如果10s内查到了就继续,否则报错
el = WebDriverWait(web, 10, 0.5).until( # 显示等待,浏览器等待10s每0.5s轮询一次,搜索,如果检测到返回元素EC.presence_of_element_located((By.NAME, '所需的name'))
)ActionChains(web).move_to_element_with_offset(el, xoffset=255, yoffset=30) # 模拟点击el元素向右255像素向下30像素的位置
总结:
selenium优点自然是使用比较简单,怎么访问网站就怎么写代码即可,但是访问速度比较慢,需要等待页面JS加载。
相关文章:
python 爬虫 入门 六、Selenium
Selenium本来是一个自动测试工具,用于模拟用户对网站进行操作。在爬虫领域也有其用处。 一、下载安装Selenium及附属插件 pip install Selenium 安装完成后还需要安装一个浏览器驱动,来让python能启动浏览器。 如果是Edge或者其他基于Chromium的浏览器…...
ReactPress:重塑内容管理的未来
ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议,欢迎一起共建,感谢Star。 ReactPress:重塑内容管理的未来 在当今信息爆炸的时代,一个高效、易用的内容管理系统࿰…...
w035基于web的学科竞赛管理
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文件࿰…...
Java:JVM
1.JVM内存区域的划分 一个Java写的程序跑起来,就得到了一个Java进程 JVM 上面运行的字节码指令; 进程:操作系统资源分配的基本单位; 内存区域的划分: 1.程序计数器 在内存空间里(比较小的空间),保存了下一个要执行的指令的内存地址(元数据区的地址); 这里的"下一条…...
Windows下mysql数据库备份策略
Windows下mysql的增量备份和全量备份,并利用schtasks设置定时任务执行bat脚本。 一、备份要求 序号 备份类型 备份频次 备份时间 1 增量备份 每周一-每周六各一次 18:00:00 2 全量备份 每周日一次 18:00:00 二、备份方法 2.1增量备份 2.1.1准备工作…...
基于SSM的校园美食交流系统【附源码】
基于SSM的校园美食交流系统 效果如下: 管理员主页面 用户主页面 美食信息页面 美食资讯页面 修改密码页面 论坛中心页面 研究背景 随着高校信息化建设的不断推进,校园生活日益丰富多样,学生对于美食的需求与探索也愈发旺盛。然而ÿ…...
2024 年Postman 导入和导出 cURL 命令图文教程
Postman 导入和导出 cURL 命令图文教程...
ArcGIS从Excel表格文件导入XY数据并定义坐标系与投影的方法
本文介绍在ArcMap软件中,从Excel表格文件中批量导入坐标点数据,将其保存为.shp矢量格式,并定义坐标系、转为投影坐标系的方法。 已知我们有一个Excel表格文件(可以是.xls、.xlsx、.csv等多种不同的表格文件格式)&#…...
【vue】echarts地图添加蒙版图片,多图层地图实现天气信息展示
实现原理:多层图层叠加实现复杂的信息展示。 <template><div class"wrapper"><el-drawertitle"天气信息":modal"iszz":visible.sync"weatherinfo":direction"direction"><drawer:labelnam…...
MyBatis几种SQL写法
目录 1. 批量操作:通过标签支持批量插入 2. 批量操作:通过标签支持批量更新 3. 批量操作:通过标签支持批量删除 4. 动态SQL 3. 多条件分支查询 4. SQL语句优化:使用标签避免多余的AND或OR关键字。 5. 注解方式使用MyBatis 6. 一对多 7. 多对一&…...
蓝牙音响音频功放:【矽源特HAA9809 AB+D类自动切换】
目录 1:HAA9809特性 2:典型应用电路 3:CTRL管脚控制信息 4:一线脉冲控制方式 5:输入电阻,调节放大增益 6:输入电容,调节频响 7:总结 矽源特ChipSourceTek-HAA9809…...
Webpack知识点—publicPath
文章目录 一、publicPath的定义和作用二、publicPath的配置方式三、publicPath的注意事项四、publicPath的常见问题和解决方法五、Vite 如何修改publicPathWebpack的publicPath是一个重要的配置项,它用于指定打包后生成的静态资源文件在浏览器中的访问路径。 一、publicPath的…...
【JAVA】Java基础—面向对象编程:构造方法的重载
在Java中,构造方法的重载允许一个类定义多个构造方法,这些构造方法可以具有不同的参数列表。通过构造方法的重载,我们可以根据不同的需求创建对象,并以不同的方式初始化对象的属性。 我们可以将构造方法的重载比作一个餐厅的菜单…...
科研绘图系列:R语言多图形组合(barplot boxplot stacked plots)
文章目录 介绍加载R包数据下载图:Barplot图:Boxplot per elemental composition图:网络的边数目图:Clusters - elemental composition合并图形系统信息介绍 R语言多个图形组合 加载R包 library(tidyverse) library(ggpubr) library(rstatix) library(patchwork)数据下载…...
诡异的win11远程桌面连接一闪而过
客户端win10,服务器端是win2019 上面的仅允许允许使用网络级别身份验证的也勾掉了。 mstsc和mstsc -admin远程桌面连接,输入ip点连接后闪退,根本不弹出用户密码输入。但有人也是win10却可以连,也不知道自己的win10有啥差异的地方。…...
基因组编辑与CRISPR技术:基因治疗的革命性突破
引言 基因组编辑技术的出现,尤其是CRISPR-Cas9技术的问世,极大地推动了生物医学研究和基因治疗的发展。这一技术不仅为基础科学研究提供了强大的工具,也为治疗遗传性疾病、癌症以及某些病毒感染开辟了新的治疗思路。基因组编辑技术可以精准地…...
智能检测技术与传感器(热电传感器四个定律)
热电传感器: 两种不同的导体两端相互紧密地连接在一起,组成一个闭合回路。当两接点温度不等时(设 ),回路中就会产生大小和方向与导体材料及两接点的温度有关的电动势,从而形成电流,这种现象称为…...
C# WPF FontDialog字体对话框,ColorDialog颜色对话框 引用
WPF 并没有内置FontDialog和ColorDialog,但可以通过引用 Windows Forms 的控件来实现字体和颜色选择对话框功能。FontDialog 允许用户选择字体、样式、大小等设置。 添加 Windows Forms的引用 项目工程:右键“引用”》“添加引用”》勾选System.Window…...
在unity中实现把普通的照片,图片 变成油画风格的shader实现
可以通过对shader的Radius的值得设置来改变油画风格的力度,0最小,10是最大。...
使用elementUI实现表格行拖拽改变顺序,无需引入外部库
前言: 使用vue2element UI,且完全使用原生的拖拽事件,无需引入外部库。 如果表格数据量较大,或需要更多复杂功能,可以考虑使用 vuedraggable库,提供更多配置选项和拖拽功能。 思路: 1. 通过el-table的ro…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
