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

【自动化测试】使用Python selenium类库模拟手人工操作网页

使用Python selenium类库模拟手人工操作网页

  • 背景
  • 准备工作
    • 安装Python版本
    • 安装selenium类库
    • 下载selenium驱动
    • 配置本地环境变量
  • 自动化脚本输出
    • 页面表单自动化填充相关代码

背景

  • 待操作网页必须使用IE浏览器登录访问
  • 用户本地只有edge浏览器,通过edge浏览器IE模式访问指定网页

验证结论:
selenium不支持通过edge浏览器IE模式控制网页。

目的:
通过本次实践,本文详细描述selenium使用过程,如环境配置方法以及基础网页表单填充,按钮点击等操作。

准备工作

安装Python版本

python官网下载python版本,推荐稳定发布版本,如python 3.13.2

安装selenium类库

打开本地cmd窗口,执行以下命令下载selenium类库

pip install selenium

查看selenium Python类库官方文档,各版本功能介绍等。

下载selenium驱动

chrome,edge,Firefox等高级浏览器驱动在selenium官网获取,IE浏览器驱动可以下载附件,包含32位和64位版本。

配置本地环境变量

为保证Python脚本正常读取webDriver驱动文件,须配置环境变量,对应值为驱动所在目录。
在这里插入图片描述

自动化脚本输出

python脚本运行自动初始化打开浏览器,相关代码如下。

注意:只能重新打开浏览器,不能基于已打开网页操作,各位酌情选择。

def init_driver(logger, browser_name, url):
    options = Options()
    # 脚本运行完不关闭网页
    options.add_experimental_option("detach", True)
    # 禁用扩展
    options.add_experimental_option('useAutomationExtension', False)
    # 添加agent头,绕过IE浏览器检查
    options.add_argument(
        'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36')

    if browser_name == 'IE':
        # 继承个人主机配置,保留IE模式打开edge浏览器能力
        # options.add_argument(
        #     "--user-data-dir=C:\\Users\\杨鹏\\AppData\\Local\\Microsoft\\Edge\\User Data")  # 替换为你的实际用户数据目录路径
        options.add_argument("--profile-directory=Default")  # 使用默认配置文件
        driver = webdriver.Ie(options=options)
    elif browser_name == 'Edge':
        options.use_chromium = True  # Ensure we are using the Chromium-based Edge
        options.add_experimental_option("excludeSwitches", ["enable-automation"])  # 避免 WebDriver 检测
        driver = webdriver.Edge(options=options)
    else:
        logger.error("Unsupported browser. Use 'IE' or 'Edge'.")
        raise ValueError("Unsupported browser. Use 'IE' or 'Edge'.")
    return driver

页面表单自动化填充相关代码

通过页面元素id等关键信息,定位页面元素,自动填充,包括文本框或者下拉列表选择。

def login(driver, url, username, password, user_phone):
    driver.get(url)

    username_input = driver.find_element(By.ID, 'tbUploadEndDate5')
    username_input.send_keys(username)

    password_input = driver.find_element(By.ID, 'tbUploadEndDate22')
    password_input.send_keys(password)

    # 图片验证码
    validate_code_input = driver.find_element(By.ID, 'validateCode')
    validate_code = input("请输入自动打开页面上的验证码计算结果: ")
    validate_code_input.send_keys(validate_code)

    # 找到手机号下拉列表元素
    user_phone_select_input = driver.find_element(By.ID, "userPhone")  # 使用适当的定位器
    # 创建Select对象
    user_phone_select = Select(user_phone_select_input)
    # 根据文本选择选项
    user_phone_select.select_by_visible_text(user_phone)

    # 短信验证码发送
    verification_code_input = driver.find_element(By.ID, 'verificationCode')
    send_msg_button = driver.find_element(By.ID, 'sendBtn')
    # send_msg_button.click()
    verification_code = input("请输入您收到的短信验证码: ")
    # 短信验证码
    verification_code_input.send_keys(verification_code)

    login_img = driver.find_element(By.XPATH, "//td/img[@onclick='javascript:submitform();']")
    login_img.click()

    # 等待登录成功(可以根据实际情况调整等待条件)
    WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.ID, 'some_element_after_login')))

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

相关文章:

  • 【数据采集】基于Selenium采集豆瓣电影Top250的详细数据
  • python编程-内置函数reversed(),repr(),chr()详解
  • Java 8 Lambda表达式详解:从入门到实践
  • Apache SeaTunnel 整体架构运行原理
  • 20240206 adb 连不上手机解决办法
  • Mac 终端命令大全
  • Kafka系列教程 - Kafka 集群 -4
  • 动手学图神经网络(12):MovieLens上的链接回归
  • [Harmonyos]相机功能开发基础知识篇(持续更新)
  • 云计算中的DevOps是什么?为什么它很重要?
  • 20240824 美团 笔试
  • [ Spring] Integrate Spring Boot Dubbo with Nacos 2025
  • 【论文写作】深度学习无线通信领域的一些国际著名期刊
  • 15:00面试,15:07就出来了,问的问题有点变态。。。
  • 项目实训:表白墙,图书管理系统
  • windows 10/11 开启wsl2运行linux 使用cuda方法
  • Flink CDC YAML:面向数据集成的 API 设计
  • Excel 融合 deepseek
  • JumpServer堡垒机管理服务器与数据库资产
  • 【论文阅读】Adversarial Detection: Attacking Object Detection in Real Time
  • 前端 CSS 动态设置样式::class、:style 等技巧详解
  • 基于WOA鲸鱼优化的TCN时间卷积神经网络时间序列预测算法matlab仿真
  • 【玩转 Postman 接口测试与开发2_019】第15章:利用 Postman 初探 API 性能测试(含实战截图)
  • FFmpeg使用GPU编解码,及在C++代码中实现FFmpeg使用GPU编解码
  • C# LINQ与集合类 数据操作
  • postgresql-15(yum安装教程)