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

Selenium与Qt应用:自动化与GUI结合实践

前言

  在自动化测试中,Selenium 是一个强大的工具,能够模拟真实的浏览器操作。然而,当我们需要通过图形用户界面(GUI)进一步提高操作效率时,如何将自动化流程与用户友好的操作界面结合起来便成为了一个关键问题。本文将介绍如何使用 Selenium 与 PyQt5 相结合,实现一个带有 GUI 控制的自动化任务工具。

  概述

  本程序包含两个核心部分:一部分是基于 Selenium 的网页自动化任务,另一部分则是基于 PyQt5 的配置页面,用于通过界面输入和管理自动化操作的参数。

  需要注意的是:各种依赖库和Python版本以及运行系统兼容性很重要。各位记的选择适配的版本。

  具体功能如下:

  1. 用户登录自动化:通过 Selenium 自动登录目标网页。

  2. 数据抓取与导出:根据用户输入的时间范围,自动抓取网页中的数据并导出。

  3. 配置文件管理:通过 PyQt5 界面管理自动化任务所需的配置,如账号、密码、时间范围等。

  Selenium 部分实现

  1. 浏览器初始化与登录

 from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Bydef login(driver, username, password):driver.get('https://example.com/login')user_input = driver.find_element(By.NAME, 'username')pass_input = driver.find_element(By.NAME, 'password')login_button = driver.find_element(By.XPATH, '//*[@id="login-button"]')user_input.send_keys(username)pass_input.send_keys(password)login_button.click()

 

 首先启动浏览器,并通过用户输入的账号密码登录目标系统。

  2. 数据抓取

 def search_user(driver, user_data):search_input = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="search-input"]')))search_input.send_keys(user_data['户号'])search_button = driver.find_element(By.XPATH, '//*[@id="search-button"]')search_button.click()

模拟用户在网页上搜索指定信息,通过 Selenium 的 WebDriverWait 方法确保在元素加载完成后再进行操作,避免因页面加载过慢导致的异常。

  3. 数据获取与处理

  def get_aim_data(driver):data_list = []try:table_element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="data-table"]/tbody/tr')))rows = table_element.find_elements(By.TAG_NAME, 'tr')for row in rows:columns = row.find_elements(By.TAG_NAME, 'td')data_list.append([col.text for col in columns])except Exception as e:print(f"数据抓取失败: {e}")return data_list

 

通过 get_aim_data 函数抓取表格中的目标数据,逐行解析并存储到 data_list 中。

  PyQt5 界面开发

  为了增强程序的交互性,通过 PyQt5 实现了一个简单的 GUI 界面,用户可以通过该界面配置 Selenium 自动化任务的参数。

  1. 界面初始化

 from PyQt5.QtWidgets import QWidget, QFormLayout, QLineEdit, QPushButton, QLabel, QVBoxLayoutclass ConfigPage(QWidget):def __init__(self):super().__init__()self.init_ui()def init_ui(self):layout = QFormLayout()self.username = QLineEdit(self)self.password = QLineEdit(self)self.start_date = QLineEdit(self)self.end_date = QLineEdit(self)layout.addRow("账号:", self.username)layout.addRow("密码:", self.password)layout.addRow("开始日期:", self.start_date)layout.addRow("结束日期:", self.end_date)submit_button = QPushButton("提交", self)submit_button.clicked.connect(self.submit_config)main_layout = QVBoxLayout()main_layout.addLayout(layout)main_layout.addWidget(submit_button)self.setLayout(main_layout)def submit_config(self):username = self.username.text()password = self.password.text()start_date = self.start_date.text()end_date = self.end_date.text()print(f"账号: {username}, 密码: {password}, 开始日期: {start_date}, 结束日期: {end_date}")

 

用户可以输入账号、密码以及数据抓取的时间范围,并点击“提交”按钮来保存这些配置。

  2. 将配置应用于 Selenium 自动化

def selenium_job(username, password, start_date, end_date):driver = webdriver.Chrome()login(driver, username, password)for date in iterate_dates(start_date, end_date):search_user(driver, user_data)data = get_aim_data(driver)print(f"{date} 的数据为: {data}")

 selenium_job 函数结合了前面的 Selenium 自动化操作,将从 GUI 中获取的配置应用于自动化任务中。

  加入随机等待

  为了避免网页封禁,我们可以在操作中加入了随机延迟时间。通过 time.sleep 和 random.uniform,可以在模拟用户操作时添加一定的不确定性。

 import time, randomdef sleep_time():time.sleep(random.uniform(0.1, 0.5))def sleep_time_short():time.sleep(random.uniform(0.05, 0.2))

 结语

  上述错略的介绍了如何将 Selenium 与 PyQt5 结合,开发一个带有自动化功能和用户界面的工具。在实际使用中,这样的工具可以帮助我们高效地完成复杂的数据抓取任务,并通过图形界面简化配置。感觉有帮助的jym请点个赞。

 

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   


http://www.mrgr.cn/news/23593.html

相关文章:

  • 【运维方案】信息系统运维方案(Word完整版)
  • 灭火器目标检测数据集 3700张 灭火器 带标注 voc yolo
  • 请解释Java中的深拷贝和浅拷贝的区别。什么是Java中的代理模式?它有什么作用?
  • Ubuntu WSL使用技巧
  • 强大的3款自动爬虫利器,再也不用手撸代码了
  • KubeCon China 回顾|快手的 100% 资源利用率提升:从裸机迁移大规模 Redis 到 Kubernetes
  • replace的详解和常用的案例
  • 智能风扇的全新升级:NRK3603语音芯片识别控制模块的应用
  • Spring Integration SFTP集成
  • 代码随想录:单调栈1-3
  • 【Kubernetes】记录一下初始化Kubernetes集群时遇到的问题
  • 定制个性化相亲交友平台的全流程解析
  • JAVA开源项目 员工绩效考核系统 计算机毕业设计
  • 【spring】IDEA 新建一个spring boot 项目
  • CentOS系统上Node.js安装与配置最佳实践
  • 软件测试学习笔记丨Postman实战练习
  • C/C++——野指针处理
  • 提高电子邮件营销点击率的17种强大策略
  • 如何实现滚动到el-table 的底部
  • 【Go】Go语言介绍与开发环境搭建