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

前言

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

  概述

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

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

  具体功能如下:

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

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

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

  Selenium 部分实现

  1. 浏览器初始化与登录

 from selenium import webdriver

  from selenium.webdriver.common.action_chains import ActionChains

  from selenium.webdriver.support.ui import WebDriverWait

  from selenium.webdriver.support import expected_conditions as EC

  from selenium.webdriver.common.by import By

  def 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, QVBoxLayout

  class 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, random

  def 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请点个赞。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值