import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as Ec
# 配置浏览器
options = webdriver.ChromeOptions()
options.add_argument('--start-maximized') # 浏览器窗口最大化
options.add_argument("--disable-web-security"
1、安装
pip install playwright
2、安装驱动
安装所有驱动
playwright install
安装指定驱动
# Firefox
playwright install firefox
# Chromium
playwright install chromium
# WebKit
playwright install webkit
指定需要启动的浏览
1、整个页面截图
page.screenshot(path='example.png')
2、指定元素截图
# 选择你想要截图的元素
element = page.locator('//form')
# 捕获元素的截图
element.screenshot(path='element.png')
3、指定坐标截图
page.screenshot(path='page_part.png', clip={'x': 0, 'y': 0, 'width': 300, 'height': 300})
import pandas as pd
def df_add_to_excel(df, file_path):
with pd.ExcelWriter(file_path, mode='a', engine='openpyxl', if_sheet_exists='overlay') as writer:
# 将数据追加到Excel文件中
df.to_excel(writer, sheet_name='Sheet1', index=False, startrow=writer.sheets['Sheet1'].max_row, header=False)
if_sheet_exists='overlay' 表示如果工作表已存在,就覆盖它
import sys
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication
class Stats:
def __init__(self):
# 从文件中加载UI定义
self.ui = uic.loadUi("main.ui")
if __name__ == "__main__":
App = QApplication(sys.argv) # 创建QApplication对象,作为GUI主程序入口
stats = Stats()
stats.ui.show() # 显示主窗体
sys.exit(App.exec_()) # 循环中等待
PyQt5实现
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QFileDialog, QMessageBox, QLineEdit, \
QHBoxLayout, QDesktopWidget
import zipfile
import os
class Installer(QWidget):
def __init__(self):
super().__init__()
self.zip_path = 'Everything-1.4.1.1022.x64.zip' # 程序压缩包路径
首先看一下需求
排序列表:首先对列表进行排序。
分组:将排序后的列表按每组5个元素进行分组。
组内排序:在每个组内,将元素按长度进行排序。
返回一个一维列表
lst = ['a', 'bbbbbb', 'j', 'gdrgd', 'gfgfg', 'sfsf', 'sfeg', 'sg', 'gfgfg', 'gfgf', 'fg', 'gfgf']
# 1. 对列表进行排序
sorted_lst = sorted(lst)
# 2. 按每组5个元素进行分组,组内按元素长度进行排序
# 3
import time
from typing import Union
import requests
from playwright.async_api import Page, expect, BrowserContext
# 切换到 指定的 标签页,通过 title 名称 或 url 地址
async def switch_to_page(context: BrowserContext, title: str = None, url: str = None, timeout: int = None) -> Union[Page | bool]:
"""
:summary: 切换到 指定的 标签页,通过 title 名称 或 url 地址
:param contex
# 监听 并 关闭 弹窗
async def over_dialog(page):
# 为页面设置弹窗监听器,一旦弹窗出现就关闭它
page.on('dialog', lambda dialog: asyncio.create_task(dialog.dismiss()))
1、retry装饰器
不支持异步函数
from retrying import retry
@retry(stop_max_attempt_number=3)
def my_function():
print("执行函数")
raise ValueError("这是一个错误")
# 调用函数
my_function()
2、自己写一个
支持异步函数
import asyncio
import inspect
import time
def retry_on_exception(retries, excep