python selenium edge浏览器自动登录测试

主要实现了读取配置文件,运行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)
"""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值