Selenium 是一款强大的自动化测试工具,可用于模拟用户在浏览器中的各种操作。它支持多种浏览器(如 Chrome、Firefox、Edge 等)和多种编程语言(如 Python、Java、C# 等),广泛应用于 Web 应用程序的自动化测试、网页数据爬取、自动化操作等场景。

一、Selenium 的安装

要开始使用 Selenium,首先需要安装它。使用 Python 的 pip 包管理器可以轻松完成安装。打开命令行终端,并执行以下命令:

pip install selenium

如果你使用的是虚拟环境,请确保在激活虚拟环境后再执行此命令。安装完成后,你就可以在 Python 代码中导入并使用 Selenium 库了。

在安装过程中,可能会遇到一些常见问题,下面是一些解决方案:

  1. 网络问题:如果在执行pip install命令时遇到网络连接超时或失败的情况,可以尝试使用国内的镜像源来加速下载。例如,使用清华大学的 pip 镜像:
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 权限问题:如果你没有足够的权限在全局环境中安装包,可能会看到 "Permission denied" 错误。此时,可以考虑以下两种解决方案:
    • 使用虚拟环境:虚拟环境可以让你在项目特定的环境中安装包,而不需要管理员权限。创建和激活虚拟环境的命令如下:
      # 创建虚拟环境
      python -m venv myenv# 激活虚拟环境(Windows)
      myenv\Scripts\activate# 激活虚拟环境(Linux/Mac)
      source myenv/bin/activate
      
    • 使用--user选项:在安装命令后添加--user选项,将包安装到用户目录下:
      pip install selenium --user
      

安装完成后,你可以通过以下代码验证 Selenium 是否安装成功:

import selenium
print(selenium.__version__)  # 打印Selenium版本号

如果能够正常打印出版本号,说明 Selenium 已经成功安装。

二、Edge 浏览器驱动的下载与配置

Selenium 需要对应的浏览器驱动才能控制浏览器。对于 Edge 浏览器,你需要下载 Microsoft Edge WebDriver。

  1. 确定 Edge 浏览器版本:打开 Edge 浏览器,点击右上角的三个点(...),选择 "帮助和反馈" > "关于 Microsoft Edge",查看版本号。版本号通常显示为类似于 "114.0.1823.51" 的格式。

  2. 下载对应版本的 WebDriver:访问 Microsoft Edge WebDriver 下载页面,选择与你浏览器版本匹配的 WebDriver 进行下载。具体步骤如下:

    • 在下载页面中,找到与你 Edge 浏览器版本完全匹配的 WebDriver 版本。如果找不到完全匹配的版本,选择最接近且不高于你浏览器版本的驱动。
    • 根据你的操作系统(Windows、macOS 或 Linux)选择相应的下载包。
    • 下载完成后,得到一个压缩文件(如.zip 或.msi 格式)。
  3. 解压并放置驱动文件:将下载的压缩包解压,得到一个 exe 文件(如 msedgedriver.exe)。将此文件放在 Python 解释器的根目录中。你可以通过以下 Python 代码查看解释器的根目录:

import sys
print(sys.executable)

执行上述代码后,会输出 Python 解释器的路径,例如:

C:\Python39\python.exe

在这个例子中,Python 解释器的根目录是C:\Python39\,你需要将msedgedriver.exe文件复制到这个目录中。

除了将驱动文件放在 Python 解释器根目录外,还有其他几种配置方式:

  • 将驱动路径添加到系统环境变量

    1. 右键点击 "此电脑",选择 "属性"
    2. 点击 "高级系统设置"
    3. 在 "系统属性" 窗口中,点击 "环境变量" 按钮
    4. 在 "系统变量" 列表中,找到 "Path" 变量,点击 "编辑"
    5. 点击 "新建",添加驱动文件所在的目录路径
    6. 确认所有窗口,使更改生效
  • 在代码中显式指定驱动路径
    如果你不想修改系统环境变量或 Python 解释器目录,也可以在代码中明确指定驱动的路径:

    from selenium import webdriver
    from selenium.webdriver.edge.service import Service# 显式指定驱动路径
    edge_driver_path = "D:/webdrivers/msedgedriver.exe"  # 根据实际路径修改
    service = Service(edge_driver_path)
    driver = webdriver.Edge(service=service)
    
三、使用 Selenium 打开浏览器

下面是一个简单的 Python 代码示例,展示如何使用 Selenium 打开 Edge 浏览器并访问百度网站:

from selenium import webdriver
from selenium.webdriver.edge.service import Service
import time# 设置Edge驱动的路径
edge_driver_path = "msedgedriver.exe"  # 如果已放在Python根目录,可直接这样写# 创建Service对象
service = Service(edge_driver_path)# 创建Edge浏览器实例
driver = webdriver.Edge(service=service)try:# 打开百度网站driver.get("https://www.baidu.com")# 获取页面标题并打印title = driver.titleprint(f"当前页面标题: {title}")# 等待5秒钟,以便观察time.sleep(5)except Exception as e:print(f"发生错误: {e}")
finally:# 关闭浏览器driver.quit()

在上述代码中,我们首先导入了必要的模块,然后创建了一个 Edge 浏览器的 Service 对象,接着使用该 Service 创建了浏览器实例。通过get方法打开了百度网站,使用time.sleep让程序暂停 5 秒以便我们观察,最后使用quit方法关闭了浏览器。

让我们详细分析一下这段代码:

  1. 导入模块

    • webdriver:提供了各种浏览器的驱动类
    • Service:用于配置和启动浏览器驱动服务
    • time:用于添加延时,方便观察程序执行过程
  2. 创建浏览器实例

    • 通过Service类指定驱动路径
    • 使用webdriver.Edge创建 Edge 浏览器实例
  3. 浏览器操作

    • driver.get(url):打开指定 URL 的网页
    • driver.title:获取当前页面的标题
    • driver.quit():关闭浏览器并终止驱动服务
  4. 异常处理

    • 使用try-except-finally结构确保即使发生异常,浏览器也能被正确关闭
     四、Selenium 网页图片提取实战

下面我们通过一个实战项目,展示如何使用 Selenium 从网页上提取图片。我们以 Unsplash 网站(一个提供高质量免费图片的网站)为例,提取搜索结果中的图片链接。

from selenium import webdriver
from selenium.webdriver.edge.options import Options
import re
import requests
import time
edgetest=Options() #Option对象用于对浏览器行为与属性的配置
#binary_location指明驱动的浏览器二进制文件地址,因为用户的默认的浏览器不一定是edge浏览器
edgetest.binary_location=r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver=webdriver.Edge(options=edgetest)
driver.get('https://www.ptpress.com.cn/search?keyword=python&jc=')#进入人民邮电出版社界面
time.sleep(1)#让程序休眠1秒,让页面加载出来,不加可能导致页面未加载出来就退出
#正则表达式从源码中提取图片地址
ls=re.findall(r'<img src="(.+?jpg)"></div>',driver.page_source)
i=1
for url in ls:r=requests.get(url)with open('zxc\\'+str(i)+'.jpg','wb') as f:#在当前的相对路径下已经创建了zxc这个文件夹。f.write(r.content)i+=1

这个代码实现了以下功能:

1. 浏览器配置与初始化

  • 指定浏览器路径:通过Options类设置 Edge 浏览器的安装路径(默认为系统默认位置)。

  • 创建浏览器实例:启动 Edge 浏览器并准备访问网页。

2. 访问目标网页

  • 搜索关键词:打开人民邮电出版社的搜索页面,自动填入关键词python,并加载搜索结果。

  • 强制等待:使用time.sleep(1)暂停 1 秒,确保页面元素加载完成(此方法不够可靠,后续可优化)。

3. 提取图片 URL

  • 获取页面源码:通过driver.page_source获取当前页面的 HTML 代码。

  • 正则表达式匹配:使用正则表达式<img src="(.+?jpg)"></div>提取所有图片 URL。

    • 该正则假设图片标签紧跟在</div>前,且 URL 以.jpg结尾。

4. 下载并保存图片

  • 遍历 URL 列表:对每个匹配到的图片 URL,使用requests.get()发送 HTTP 请求下载图片内容。

  • 保存文件:将图片内容写入本地文件,命名为1.jpg2.jpg等,保存在当前目录下的zxc文件夹中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91603.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91603.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91603.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hystrix与Resilience4j在微服务熔断降级中的应用对比与实战

Hystrix与Resilience4j在微服务熔断降级中的应用对比与实战 1. 问题背景介绍 在微服务架构中&#xff0c;服务之间的依赖使得链路调用更加复杂。一旦某个下游服务发生故障或响应延迟&#xff0c;可能导致整个调用链阻塞甚至雪崩&#xff0c;影响系统可用性。熔断&#xff08;Ci…

PostgreSQL数据库集群如何进行自动化性能监测?

前言&#xff1a;在这个数据爆炸的时代&#xff0c;PostgreSQL数据库集群就像是我们的"数据宝库"。但是&#xff0c;再好的宝库也需要有专业的"保安"来守护。今天我们就来聊聊如何给PostgreSQL集群配备一套智能的"保安系统"——自动化性能监测。…

OneCode体系架构深度剖析:设计哲学与AI增强之道

引言 在企业级应用开发领域&#xff0c;架构设计决定了系统的扩展性、可维护性与演进能力。OneCode作为一站式开发平台&#xff0c;其架构设计蕴含着对复杂业务场景的深刻理解与技术选型的前瞻性思考。本文将从六个维度系统剖析OneCode的架构设计理念&#xff0c;揭示其模块划分…

AWS中国区资源成本优化全面指南:从理论到实践

引言:为什么AWS中国区成本优化如此重要? 在数字化转型的浪潮中,越来越多的中国企业选择AWS中国区作为其云计算服务提供商。然而,随着业务规模的扩大,云资源成本往往成为企业关注的焦点。有效的成本优化不仅能够直接降低IT支出,还能提高资源利用效率,为企业创造更大的商…

Redis中什么是看门狗机制

在 Redis 中&#xff0c;“看门狗机制”&#xff08;Watchdog Mechanism&#xff09;不是 Redis 的核心机制之一&#xff0c;但它在一些场景中起到了重要作用&#xff0c;尤其是在使用 Redlock 分布式锁实现 或在 Redis Enterprise 等高级用法中。一、看门狗机制的通用含义看门…

[MRCTF2020]PYWebsite

function enc(code){hash hex_md5(code);return hash;}function validate(){var code document.getElementById("vcode").value;if (code ! ""){if(hex_md5(code) "0cd4da0223c0b280829dc3ea458d655c"){alert("您通过了验证&#xff01;…

AWS S3事件通知实战:从配置到生产的完整指南

引言 在现代云架构中,事件驱动设计已成为构建可扩展、高可用系统的核心模式。AWS S3作为对象存储服务,其事件通知功能为我们提供了强大的自动化处理能力。本文将基于一个真实的图片处理系统案例,详细介绍如何正确配置和使用S3事件通知。 业务场景 我们开发了一个图片处理…

[AI-video] Web UI | Streamlit(py to web) | 应用配置config.toml

链接&#xff1a;https://reccloud.cn/start?positiontab1 docs&#xff1a;AI creates videos MoneyPrinterTurbo 是一个自动化短视频创作流程的开源项目。 它通过输入主题或关键词&#xff0c;利用人工智能&#xff08;大语言模型&#xff09;生成脚本和搜索条件&#xff0…

CommonJS 功能介绍

CommonJS是JavaScript的模块化规范&#xff0c;主要用于服务器端&#xff08;如Node.js&#xff09;的模块化开发&#xff0c;其核心功能和特点如下&#xff1a; 一、核心功能模块定义与导出 module.exports&#xff1a;用于导出模块的内容&#xff0c;可以是函数、对象、变量等…

3D材质总监的“光影魔法”:用Substance Sampler AI,“擦除”照片中的光影

在三维视觉艺术的创作中&#xff0c;我们始终在探索一对核心的“对立统一”&#xff1a;一方面是**“现实世界的光照”&#xff08;Real-World Lighting&#xff09;&#xff0c;它被固定、“烘焙”在一张照片的像素之中&#xff1b;另一方面是“虚拟世界的光照”&#xff08;V…

从高斯噪声的角度分析MAE和MSE

文章目录1. MAE与MSE的本质区别2. 高斯噪声下的统计特性3. MAE导致稀疏解的内在机制4. 对比总结1. MAE与MSE的本质区别 MAE&#xff08;Mean Absolute Error&#xff09;和MSE&#xff08;Mean Squared Error&#xff09;是两种常用的损失函数&#xff0c;它们的数学形式决定了…

AR智能巡检:制造业零缺陷安装的“数字监工”

在制造业中&#xff0c;设备安装与组装环节的准确性是产品质量和生产效率的关键。传统的人工巡检和纸质作业指导书容易因人为疏忽、经验不足或信息滞后导致安装错误&#xff0c;进而引发返工、延误甚至安全事故。然而&#xff0c;随着增强现实&#xff08;AR www.teamhelper.cn…

js最简单的解密分析

js最简单的解密分析 一、JavaScript 代码保护技术简介 ✅ 为什么要保护 JavaScript 代码&#xff1f; JavaScript 是前端语言&#xff0c;代码在浏览器中是完全可见的。这意味着&#xff1a; 别人可以轻松查看你的核心算法或业务逻辑页面上的接口地址、加密逻辑等容易被抓包分析…

React强大且灵活hooks库——ahooks入门实践之开发调试类hook(dev)详解

什么是 ahooks&#xff1f; ahooks 是一个 React Hooks 库&#xff0c;提供了大量实用的自定义 hooks&#xff0c;帮助开发者更高效地构建 React 应用。其中开发调试类 hooks 是 ahooks 的一个重要分类&#xff0c;专门用于开发调试阶段&#xff0c;帮助开发者追踪组件更新和副…

React强大且灵活hooks库——ahooks入门实践之副作用类hook(effect)详解

什么是 ahooks&#xff1f; ahooks 是一个 React Hooks 库&#xff0c;提供了大量实用的自定义 hooks&#xff0c;帮助开发者更高效地构建 React 应用。其中副作用类 hooks 是 ahooks 的一个重要分类&#xff0c;专门用于处理各种副作用操作&#xff0c;如定时器、防抖、节流等…

SpringBoot一Web Flux、函数式Web请求的使用、和传统注解@Controller + @RequestMapping的区别

一、函数式 Web 在 Spring Boot 中&#xff0c;使用函数式 Web&#xff08;Function-based Web&#xff09;可以通过 RouterFunction 和 HandlerFunction 来定义路由和请求处理逻辑。这种方式与传统的注解驱动的方式不同&#xff0c;它更加简洁&#xff0c;并且适合响应式编程。…

Vue+Cesium快速配置指南

安装必要依赖在项目根目录下运行以下命令安装vue-cesium和cesium&#xff1a;npm install vue-cesium3.1.4 cesium1.84配置Vite在vite.config.js文件中添加以下配置&#xff1a;import { defineConfig } from vite import vue from vitejs/plugin-vue import { resolve } from …

矿业自动化破壁者:EtherCAT转PROFIBUS DP网关的井下实战

在深井钻机的轰鸣、矿石输送带的奔流与通风设备的不息运转中&#xff0c;矿业生产的脉搏强劲跳动。然而&#xff0c;这片创造价值的土地&#xff0c;却为自动化技术的深入设置了严苛的考场&#xff1a;信息孤岛林立&#xff1a; 高效现代的EtherCAT控制系统与井下大量稳定服役的…

SpringBoot+Loki4j+Loki+Grafana搭建轻量级日志系统

文章目录前言一、组件介绍&#xff08;一&#xff09;Loki特点架构适用场景总结&#xff08;二&#xff09;Loki4j特点&#xff08;三&#xff09;Grafana特点适用场景二、组件配置&#xff08;一&#xff09;Loki&#xff08;二&#xff09;Grafana三、项目搭建参考文章前言 …

SpringCloud之Config

SpringCloud之Config 推荐网站&#xff1a;https://www.springcloud.cc/spring-cloud-dalston.html#_spring_cloud_config 1. 什么是 Spring Cloud Config Spring Cloud Config 是 Spring 官方提供的 分布式配置中心 组件&#xff0c;用来 集中管理、动态下发、版本控制 所有微…