当前位置: 首页 > article >正文

Python Selenium介绍(一)

Selenium是什么

Selenium是一个用于自动化web应用程序测试的工具。它提供了一组工具和库,可以用多种编程语言(如Java、Python、C#等)编写测试脚本,模拟用户在浏览器中的行为,如点击链接、填写表单、提交数据等。Selenium可以在各种浏览器上运行,包括Chrome、Firefox、Safari等,它还可以与其他测试框架和工具集成,帮助开发人员和测试人员自动化执行各种测试任务,提高测试效率和质量。
官网:https://www.selenium.dev/

Seleium安装

安装第三方库

# 换源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
 
# 安装我这个版本
pip install selenium==4.6.0
 
# 安装默认最新版本
pip install selenium

这儿的版本没有过多的要求,能用就行

配置浏览器驱动

Selenium目前支持的浏览器
在这里插入图片描述

下载地址:https://www.selenium.dev/zh-cn/documentation/webdriver/troubleshooting/errors/driver_location/

示例

谷歌浏览器

  • 1.确定谷歌浏览器版本

    • 打开谷歌浏览器,输入地址chrome://settings/help
    • 查看自己的版本
      在这里插入图片描述
  • 2.选择对应版本号的驱动版本
    下载地址:https://chromedriver.storage.googleapis.com/index.html
    这里记录下最新版本谷歌驱动器下载地址:https://googlechromelabs.github.io/chrome-for-testing/

  • 3.驱动放置位置

    • 一般情况下,一些博主推荐存放在python的安装路径:
      在这里插入图片描述
      测试:
import time
# 导入selenium包
from selenium import webdriver
# 打开Firefox浏览器
browser = webdriver.Firefox()
# 停留三秒
time.sleep(3)
# 关闭浏览器
browser.quit()
  • 可以根据喜好放

直接放在D盘:
在这里插入图片描述
测试:

from selenium import webdriver
 
# 设置Chrome浏览器驱动程序的路径
chrome_driver_path = "D:\\chromedriver.exe"
 
# 初始化Chrome浏览器
browser = webdriver.Chrome(executable_path=chrome_driver_path)
 
# 打开百度网页
browser.get("https://www.baidu.com")
 
# 这里可以编写其他与页面交互的代码
 
# 关闭浏览器
browser.quit()

当我们看见百度网页后,浏览器就会关闭,这样就说明我们设置完成了

启动Chrome浏览器

# 打开Chome浏览器
browser = webdriver.Chrome()
# 关闭浏览器
browser.quit()

启动Edge浏览器

# 打开Edge浏览器
browser = webdriver.Edge()
# 关闭浏览器
browser.quit()

Selenium的初始化

当我们创建浏览器驱动对象的时候,他会创建一个新的干净的浏览器,来供我们使用

from selenium import webdriver
 
# 设置Chrome浏览器驱动程序的路径
chrome_driver_path = "D:\\chromedriver.exe"
 
# 初始化Chrome浏览器
browser = webdriver.Chrome(executable_path=chrome_driver_path)

所以,我们在浏览器上设置的东西,也可以通过代码实现设置好
比如:
浏览器下载文件后,下载的地址设置
浏览器是否加载图片
浏览器是否禁用JS
浏览器是否使用隐私模式
浏览器是否使用缓存
等等…

# -*- coding: utf-8 -*-
# @Author : pan
# @Description : 获取浏览器驱动模块
# @Date : 2024年5月25日17:53:17
 
'''
    # # 无界面化.
    # chrome_opt.add_argument('--headless')
    # # 配合上面的无界面化.
    # chrome_opt.add_argument('--disable-gpu')
    # 设置窗口大小, 窗口大小会有影响.
    # chrome_opt.add_argument('--window-size=1366,768')
    # 不加载图片, 提升速度
    # chrome_opt.add_argument('--blink-settings=imagesEnabled=false')
    # # 使用沙盒模式运行
    # chrome_opt.add_argument("--no-sandbox")
    # 远程操控
    # chromedriver = webdriver.Remote(_chromedriverUrl, options=chrome_opt)
    # 自动接受警告和对话框
    # chrome_opt.add_argument('--auto-open-devtools-for-tabs')
    # 忽略SSL错误:对于测试环境中自签名证书的站点。
    chrome_opt.add_argument('--ignore-certificate-errors')
    # chromedriver.set_page_load_timeout(30)  # 设置页面加载超时时间
    # chromedriver.execute_cdp_cmd("Page.setCacheDisabled", {"cacheDisabled": True})  # 禁用缓存
    # 自定义Chrome的数据存储目录,用于持久化Cookies、存储等。
    # chrome_opt.add_experimental_option('prefs', {'profile.default_content_settings.popups': 0,
    #                                              'download.default_directory': '/path/to/download'})
    # # 创建一个临时目录来存储浏览器会话的数据
    #     user_data_dir = "/path/to/temp/dir"  # 替换为你希望存储临时数据的路径
    #     if os.path.exists(user_data_dir):
    #         shutil.rmtree(user_data_dir)  # 如果目录已存在,则删除它
    #     os.makedirs(user_data_dir)  # 创建新的临时目录
    #
    # chrome_opt.add_argument(f"user-data-dir={user_data_dir}")
    # 设置代理
    # chrome_opt.add_argument('--proxy-server=http://ip:port')
    # chrome_opt.add_argument('--proxy-server=http://127.0.0.1:8888')
    # 启动无痕模式
    # chrome_opt.add_argument('--incognito')
    # 禁用扩展
    # chrome_opt.add_argument('--disable-extensions')
    # 禁用JS
    # chrome_opt.add_argument('--disable-javascript')
    # 用户代理设置:模拟不同的浏览器或设备访问。
    # chrome_opt.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')
'''
 
import time
import json
import os
from dataclasses import dataclass, asdict
 
from selenium import webdriver
 
 
@dataclass
class WebDriveConf:
    """
    浏览器驱动配置
    """
    chromedriver_url: str = 'D:\\chromedriver.exe'  # 浏览器驱动路径
    user_data_dir: str = 'D:\\webDriverTempDir'  # 存储临时数据的路径
    is_use_cache: int = 0   # 是否使用缓存
    is_load_page: int = 1   # 是否加载页面
    is_load_img: int = 0   # 是否加载图片
    is_ignore_certificate: int = 1  # 是否忽略证书
    is_incognito: int = 1  # 是否启动无痕模式
 
    def to_dict(self) -> dict:
        """
        返回配置信息的 JSON 格式表示
        Returns:            dict: 配置信息的 JSON 格式表示
        """
        return asdict(self)
 
    def read_json_config(self, file_path: str) -> dict:
        """
        从 JSON 文件中读取配置信息并返回字典
        Args:        file_path (str): JSON 文件路径
        Returns:        dict: 包含配置信息的字典
        """
        # 检查文件是否存在
        if not os.path.exists(file_path):
            # 如果文件不存在,则创建一个包含默认配置信息的 JSON 文件
            with open(file_path, "w") as file:
                json.dump(self.to_dict(), file, indent=4)
 
        # 读取配置文件
        with open(file_path, "r") as file:
            config_dict = json.load(file)
        return config_dict
 
    def write_json_config(self, config_dict: dict, file_path: str):
        """
        将配置信息写入 JSON 文件
        Args:        config_dict (dict): 包含配置信息的字典
            file_path (str): JSON 文件路径
        """
        with open(file_path, "w") as file:
            json.dump(config_dict, file, indent=4)
 
class ChromeWebDriver:
 
    def __init__(self, conf: WebDriveConf):
        self.conf = conf
        self.chrome_opt = webdriver.ChromeOptions()
        self.chrome_opt.add_argument('--user-data-dir=' + self.conf.user_data_dir)
        # 判断是否使用缓存 (如果不使用缓存,则删除缓存文件)
        if not self.conf.is_use_cache:
            if os.path.exists(self.conf.user_data_dir):
                # 删除这个文件夹
                import shutil
                shutil.rmtree(self.conf.user_data_dir)
 
        # 判断是否有文件夹
        if not os.path.exists(self.conf.user_data_dir):
            os.makedirs(self.conf.user_data_dir)
 
        # 无界面化
        if not self.conf.is_load_page:
            self.chrome_opt.add_argument('--headless')
        # 是否加载图片
        if not self.conf.is_load_img:
            self.chrome_opt.add_argument('--blink-settings=imagesEnabled=false')
        # 是否忽略证书
        if self.conf.is_ignore_certificate:
            self.chrome_opt.add_argument('--ignore-certificate-errors')
        # 启动无痕模式
        if self.conf.is_incognito:
            self.chrome_opt.add_argument('--incognito')
        # 创建 Chrome WebDriver 实例
        self.chromedriver = webdriver.Chrome(executable_path=self.conf.chromedriver_url, options=self.chrome_opt)
 
 
if __name__ == '__main__':
 
    # 创建 WebDriveConf 实例并解包配置信息
    web_driver_conf = WebDriveConf(**WebDriveConf().read_json_config("web_driver_conf.json"))
 
    # 创建 ChromeWebDriver 实例
    chrome_web_driver = ChromeWebDriver(web_driver_conf)
 
    # 打开网页
    chrome_web_driver.chromedriver.get("https://www.bilibili.com/?spm_id_from=333.788.0.0")
 
    time.sleep(10)
 
    chrome_web_driver.chromedriver.quit()

http://www.kler.cn/a/409857.html

相关文章:

  • 项目实战:基于深度学习的人脸表情识别系统设计与实现
  • JavaScript中的this指向绑定规则(超全)
  • 大数据实验4-HBase
  • springboot 使用笔记
  • 自动驾驶概念
  • IIFE - 立即执行函数
  • 深入解析Java面向对象编程:Object类、泛型、序列化与网络编程
  • 如何通过cPanel创建品牌电子邮件
  • H5流媒体播放器EasyPlayer.js网页直播/点播播放器如果H.265视频在播放器上播放不流畅,可以考虑的解决方案
  • JavaWeb——Ajax、Element、打包部署
  • 鱼眼相机模型-MEI
  • 24/11/25 视觉笔记 深度传感器和手势识别
  • Spring Boot英语知识网站:性能优化
  • 【Linux学习】【Ubuntu入门】2-3 make工具和makefile引入
  • MySQL基础知识大总结
  • Vue2 常见知识点(一)
  • RGB图片 、RGBA、 灰度图、二值图
  • 拳皇98笔记
  • 【人工智能】Python常用库-Pandas常用方法教程
  • Mybatis PLUS查询对List使用OR模糊查询
  • 读《Effective Java》笔记 - 条目7
  • C#基础控制台程序
  • stable Diffusion官方模型下载
  • 软件工程设计模式--结构型设计模式
  • 如何使用 PyCharm 工具连接远程服务器进行开发
  • Flume和kafka的整合:使用Flume将日志数据抽取到Kafka中