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

WordPress客户端汕头网站优化公司

WordPress客户端,汕头网站优化公司,泰安seo排名,分类wordpress文章目录 示例一:常见装饰器编写重试机制示例二#xff1a;使用类实现装饰器示例三#xff1a;使用函数装饰器并返回闭包示例四#xff1a;使用 wrapt 模块 示例一:常见装饰器编写重试机制 示例代码 import time import traceback import logging from typing import Call… 文章目录 示例一:常见装饰器编写重试机制示例二使用类实现装饰器示例三使用函数装饰器并返回闭包示例四使用 wrapt 模块 示例一:常见装饰器编写重试机制 示例代码 import time import traceback import logging from typing import Callable from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException, WebDriverException, TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC# 设置日志配置 logging.basicConfig(levellogging.ERROR) logger logging.getLogger(__name__)# 假设 DOME 是一个配置字典用于控制 DEBUG 模式 DOME {DEBUG: False,debug: False }def exr_func(*args, **kwargs):# 在每次重试前执行的操作可以在此添加刷新页面等逻辑driver kwargs.get(driver)if driver:driver.refresh()time.sleep(2) # 等待页面刷新完成def dec_retry(num1, exr: Callable lambda *_, **__: None, catchException, excludeException, out_errorTrue):装饰器重复执行func并忽略异常超过次数抛出异常或返回空此函数默认输出异常信息def decorator(func):def dec(*args, **kwargs):for i in range(1, num 1):try:return func(*args, **kwargs)except exclude as err:raise errexcept catch as err:logger.error(f第 {i} 次执行失败)if out_error:logger.error(err, traceback.format_exc(), sep\n)if DOME.get(DEBUG) or DOME.get(debug):logger.error(已开启 DEBUG 模式直接抛出异常)raise errif i num:logger.error(f已执行 {num} 次抛出异常)raise errlogger.error(开始重试)exr(*args, **kwargs)return decreturn decoratordec_retry(num3, exrexr_func, catch(NoSuchElementException, WebDriverException, TimeoutException)) def login(driver, username, password):# 访问登录页面driver.get(https://example.com/login)# 等待页面加载完成WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, username)))# 输入用户名username_field driver.find_element(By.ID, username)username_field.send_keys(username)# 输入密码password_field driver.find_element(By.ID, password)password_field.send_keys(password)# 点击登录按钮login_button driver.find_element(By.ID, loginButton)login_button.click()# 等待页面加载完成并检查是否登录成功WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, logoutButton)))print(登录成功)return Truedef main():# 设置WebDriverdriver webdriver.Chrome()username your_usernamepassword your_passwordtry:login(driver, username, password, driverdriver)except Exception as e:logger.error(f最终登录失败异常: {e})driver.quit()if __name__ __main__:main()代码解释 日志配置: 设置日志记录配置用于输出错误信息。exr_func 函数: 定义了在每次重试前执行的操作例如刷新页面。dec_retry 装饰器: 实现了重试机制捕获指定异常在重试次数用尽前会执行 exr_func 函数。login 函数: 实现具体的登录操作并被 dec_retry 装饰器装饰。main 函数: 设置 WebDriver尝试登录并在失败时输出日志信息。 示例二使用类实现装饰器 类装饰器可以更灵活地管理状态并且可以更好地组织复杂的逻辑。 import time import traceback import logging from typing import Callable from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException, WebDriverException, TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC# 设置日志配置 logging.basicConfig(levellogging.ERROR) logger logging.getLogger(__name__)# 假设 DOME 是一个配置字典用于控制 DEBUG 模式 DOME {DEBUG: False,debug: False }def exr_func(*args, **kwargs):driver kwargs.get(driver)if driver:driver.refresh()time.sleep(2) # 等待页面刷新完成class RetryDecorator:def __init__(self, num1, exr: Callable lambda *_, **__: None, catchException, excludeException, out_errorTrue):self.num numself.exr exrself.catch catchself.exclude excludeself.out_error out_errordef __call__(self, func):def wrapped_func(*args, **kwargs):for i in range(1, self.num 1):try:return func(*args, **kwargs)except self.exclude as err:raise errexcept self.catch as err:logger.error(f第 {i} 次执行失败)if self.out_error:logger.error(err, traceback.format_exc(), sep\n)if DOME.get(DEBUG) or DOME.get(debug):logger.error(已开启 DEBUG 模式直接抛出异常)raise errif i self.num:logger.error(f已执行 {self.num} 次抛出异常)raise errlogger.error(开始重试)self.exr(*args, **kwargs)return wrapped_funcRetryDecorator(num3, exrexr_func, catch(NoSuchElementException, WebDriverException, TimeoutException)) def login(driver, username, password):driver.get(https://example.com/login)WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, username)))username_field driver.find_element(By.ID, username)username_field.send_keys(username)password_field driver.find_element(By.ID, password)password_field.send_keys(password)login_button driver.find_element(By.ID, loginButton)login_button.click()WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, logoutButton)))print(登录成功)return Truedef main():driver webdriver.Chrome()username your_usernamepassword your_passwordtry:login(driver, username, password, driverdriver)except Exception as e:logger.error(f最终登录失败异常: {e})driver.quit()if __name__ __main__:main()示例三使用函数装饰器并返回闭包 使用闭包使代码更简洁。 import time import traceback import logging from typing import Callable from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException, WebDriverException, TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EClogging.basicConfig(levellogging.ERROR) logger logging.getLogger(__name__)DOME {DEBUG: False,debug: False }def exr_func(*args, **kwargs):driver kwargs.get(driver)if driver:driver.refresh()time.sleep(2)def dec_retry(num1, exr: Callable lambda *_, **__: None, catchException, excludeException, out_errorTrue):def decorator(func):def wrapped_func(*args, **kwargs):for i in range(1, num 1):try:return func(*args, **kwargs)except exclude as err:raise errexcept catch as err:logger.error(f第 {i} 次执行失败)if out_error:logger.error(err, traceback.format_exc(), sep\n)if DOME.get(DEBUG) or DOME.get(debug):logger.error(已开启 DEBUG 模式直接抛出异常)raise errif i num:logger.error(f已执行 {num} 次抛出异常)raise errlogger.error(开始重试)exr(*args, **kwargs)return wrapped_funcreturn decoratordec_retry(num3, exrexr_func, catch(NoSuchElementException, WebDriverException, TimeoutException)) def login(driver, username, password):driver.get(https://example.com/login)WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, username)))username_field driver.find_element(By.ID, username)username_field.send_keys(username)password_field driver.find_element(By.ID, password)password_field.send_keys(password)login_button driver.find_element(By.ID, loginButton)login_button.click()WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, logoutButton)))print(登录成功)return Truedef main():driver webdriver.Chrome()username your_usernamepassword your_passwordtry:login(driver, username, password, driverdriver)except Exception as e:logger.error(f最终登录失败异常: {e})driver.quit()if __name__ __main__:main()示例四使用 wrapt 模块 wrapt 是一个强大的装饰器库可以更轻松地编写装饰器特别是处理复杂逻辑时。 import time import traceback import logging import wrapt from typing import Callable from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException, WebDriverException, TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EClogging.basicConfig(levellogging.ERROR) logger logging.getLogger(__name__)DOME {DEBUG: False,debug: False }def exr_func(*args, **kwargs):driver kwargs.get(driver)if driver:driver.refresh()time.sleep(2)def dec_retry(num1, exr: Callable lambda *_, **__: None, catchException, excludeException, out_errorTrue):wrapt.decoratordef wrapper(wrapped, instance, args, kwargs):for i in range(1, num 1):try:return wrapped(*args, **kwargs)except exclude as err:raise errexcept catch as err:logger.error(f第 {i} 次执行失败)if out_error:logger.error(err, traceback.format_exc(), sep\n)if DOME.get(DEBUG) or DOME.get(debug):logger.error(已开启 DEBUG 模式直接抛出异常)raise errif i num:logger.error(f已执行 {num} 次抛出异常)raise errlogger.error(开始重试)exr(*args, **kwargs)return wrapperdec_retry(num3, exrexr_func, catch(NoSuchElementException, WebDriverException, TimeoutException)) def login(driver, username, password):driver.get(https://example.com/login)WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, username)))username_field driver.find_element(By.ID, username)username_field.send_keys(username)password_field driver.find_element(By.ID, password)password_field.send_keys(password)login_button driver.find_element(By.ID, loginButton)login_button.click()WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, logoutButton)))print(登录成功)return Truedef main():driver webdriver.Chrome()username your_usernamepassword your_passwordtry:login(driver, username, password, driverdriver)except Exception as e:logger.error(f最终登录失败异常: {e})driver.quit()if __name__ __main__:main()
http://www.dnsts.com.cn/news/87272.html

相关文章:

  • 免费的个人的网站wordpress网站生成app
  • 国内十大4a广告公司seo优化网站建设哪家好
  • 门户网站快速制作做一个公司的网站应做哪些准备工作内容
  • 自己可以做类似拓者的网站吗商品展示页面设计模板
  • 2016做砸了的小网站微信小程序怎么做成链接
  • 网站推广的软文陕西省建设厅网站月报
  • 手机网站要求怎么做虚拟网站
  • 怎么做网站优化排名济宁建设局网站
  • 长沙精品网站制作长沙优化官网公司
  • 创意设计一个网站三只松鼠网络营销策划书
  • 网站访问速度分析公司网站里面页面链接怎么做
  • 网站建设应对客户问题的话术传奇游戏网页
  • 企业网站 报价外贸互联网推广的
  • 哪种网站百度信息流优化
  • 新华书店网站建设wordpress下载最新版本
  • 厦门市住房和城乡建设局网站首页改变网站字体
  • 深圳网站建设费用多少网站建设比较
  • 个人备案网站做企业网可以吗公司网站开发费用计入哪个科目
  • 招工做哪个网站建设响应式网站有哪些好处
  • 网站建设的原则有哪些方面网站留言发送到qq邮箱
  • 网站教育机构排行前十名枣强网站建设公司
  • 营销网站建设818gx酒店 深圳 网站制作
  • 企业网站规划与建设论文如何让网站做成移动版
  • 临沂市建设局网站企业建设网站应如何申请
  • wordpress有哪些网站吗gooood谷德设计网官网
  • 长春网站设计价格大连网站快速排名提升
  • 广州市从化区住房和建设据网站网站做支付宝花呗分期
  • 网站开发过时了微网站设计尺寸
  • 想找个人建网站站点建立网站的方法
  • 邢台网站建设服务商wordpress 登录很慢