本文共 2676 字,大约阅读时间需要 8 分钟。
基于装饰器模式编写自动化登录脚本:
from selenium import webdriverfrom selenium.webdriver.chrome.options import Options# 初始化 ChromeDriverchrome_options = Options()chrome = webdriver.Chrome(options=chrome_options)chrome.implicitly_wait(30) # 等待元素可见def login(driver, url, username, password): def decorator(func): def wrapper(*args, **kwargs): logger.info("尝试登录: %s ..." % url) driver.get(url) driver.switch_to.frame("login_frame") driver.find_element_by_id("switcher_plogin").click() # 输入账号信息 driver.find_element_by_id("u").clear() driver.find_element_by_id("u").send_keys(username) driver.find_element_by_id("p").clear() driver.find_element_by_id("p").send_keys(password) driver.find_element_by_id("login_button").click() # 处理验证码 logger.info("检测到验证码滑动条,请手动完成滑动") try: while True: current_url = driver.current_url if driver.find_elements_by_id("newVcodeArea"): captcha = driver.find_element_by_id("newVcodeArea").text if captcha: logger.warning("验证码需要手动处理: %s" % captcha) break time.sleep(1) except NoSuchElementException: logger.info("未检测到验证码滑动条,继续登录...") # 登录成功验证 userinfo = driver.find_element_by_id("useralias").text if userinfo: logger.info("登录成功: 欢迎 %s" % userinfo) return func(*args, **kwargs) else: logger.error("登录失败,账号或密码错误") raise Exception("登录失败") return wrapper return decorator# 示例使用login( chrome, "http://mail.qq.com", "your_email@qq.com", "your_password")# 可以定义其他功能方法,例如发送邮件def send_email(driver, to_email, subject, content): driver.get("http://mail.qq.com") # 其他自动化操作 转载地址:http://ciafk.baihongyu.com/