主要实现了读取配置文件,运行python程序后模拟用户操作,自动登录网站,无需再输入网址、账号、密码等操作,主要用于后续网站自动化测试调用。实测换网站后,只需更改配置文件即可运行。
创建配置文件
创建.ini文件,主要用于保存,登录网址,账户,密码,账户css,密码css,edge文件下载路径(用于浏览器下载配置)
[login]
url = http://www.hao123/itemout/#/login
username_css = input[name='account']
password_css = input[name='password']
username = ki456416
password = 456148541
[download]
path =D:\conda0\基础工作\网站测试
编写edge网站登录函数
配置edge浏览器中文日志、配置下载路径
配置浏览器有头无头模式设置
整体使用显示等待
回车提交表单,模拟登录;
主要返回edge测试实例,已经配置后的下载路径
针对下载路径进行测试,看是否具有写入权限
# -*- coding: utf-8 -*-
"""
Created on Mon Apr 7 10:52:55 2025
@author: admin
"""
import logging
import configparser
from selenium import webdriver
from selenium.webdriver.edge.service import Service as EdgeService
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def execute_login(config_path, headless=False):
"""
执行完整的登录流程并返回浏览器对象
:param config_path: 配置文件路径(例如:D:/config.ini)
:param headless: 是否启用无头模式(默认:False,显示浏览器界面)
:return: 登录后的浏览器对象(需手动关闭)
"""
# ============= 配置日志记录 =============
logging.basicConfig(
format="%(asctime)s - %(levelname)s - %(message)s",
level=logging.INFO,
encoding="utf-8",
)
# ============= 读取配置文件 =============
config = configparser.ConfigParser()
config.read(config_path, encoding="utf-8")
# 1. 读取登录配置
login_config = {
"url": config.get("login", "url"),
"username_css": config.get("login", "username_css"),
"password_css": config.get("login", "password_css"),
"username": config.get("login", "username"),
"password": config.get("login", "password"),
}
# 2. 新增:读取下载路径配置
try:
download_path = config.get("download", "path")
logging.info(f"检测到下载路径配置:{download_path}")
except configparser.NoSectionError:
download_path = None
logging.warning("未找到 [download] 配置,将使用默认下载目录")
except configparser.NoOptionError:
download_path = None
logging.warning("未找到下载路径配置项 'path',将使用默认下载目录")
# ============= 初始化浏览器驱动 =============
service = EdgeService(EdgeChromiumDriverManager().install())
# 创建Edge浏览器配置选项
options = webdriver.EdgeOptions()
if headless:
options.add_argument("--headless=new") # 启用无头模式
options.add_argument("--disable-gpu") # 避免某些系统上的图形驱动问题
# 3. 新增:设置下载路径配置
if download_path:
options.add_experimental_option(
"prefs",
{
"download.default_directory": download_path,
"download.prompt_for_download": False, # 禁用下载确认对话框
"download.directory_upgrade": True,
"safebrowsing.enabled": True,
},
)
else:
# 如果未配置下载路径,保留默认设置(系统默认下载目录)
options.add_experimental_option(
"prefs",
{"download.prompt_for_download": False, "download.directory_upgrade": True},
)
# 根据headless参数初始化浏览器
driver = webdriver.Edge(service=service, options=options)
# 设置显式等待(最长等待10秒)
wait = WebDriverWait(driver, 10)
# ============= 执行登录流程 =============
driver.get(login_config["url"])
logging.info("成功打开网站登录页面")
# 输入账号
username_input = wait.until(
EC.visibility_of_element_located((By.CSS_SELECTOR, login_config["username_css"]))
)
username_input.send_keys(login_config["username"])
logging.info("已输入账号")
# 输入密码
password_input = wait.until(
EC.visibility_of_element_located((By.CSS_SELECTOR, login_config["password_css"]))
)
password_input.send_keys(login_config["password"])
logging.info("已输入密码")
# 提交表单
password_input.send_keys(Keys.RETURN)
logging.info("已提交登录信息")
return driver, download_path # 返回浏览器对象和下载路径
if __name__ == "__main__":
# 示例1:正常显示浏览器界面(默认)
driver, download_path = execute_login("D:/conda0/基础工作/网站测试/config1.ini")
input("按回车键关闭浏览器...")
driver.quit()
# 示例2:启用无头模式(隐藏界面)
# driver = execute_login("D:/conda0/基础工作/网站测试/config.ini", headless=True)
# input("按回车键结束...")
# driver.quit()
"""
# 检查路径是否存在
import os
def check_download_path(download_path):
if not os.path.exists(download_path):
print(f"路径不存在:{download_path}")
return False
# 检查是否有写入权限(通过尝试创建临时文件)
test_file = os.path.join(download_path, "test_file.txt")
try:
with open(test_file, "w") as f:
f.write("Test")
os.remove(test_file) # 删除测试文件
print(f"路径有效且可写:{download_path}")
return True
except PermissionError:
print(f"无写入权限:{download_path}")
return False
except Exception as e:
print(f"其他错误:{str(e)}")
return False
check_download_path(download_path)
"""