python软件操作
pygetwindow 桌面软件操作
# pygetwindow是一个跨平台的Python库,用于获取和操作系统窗口
# pip install pygetwindowimport pygetwindow as gw
import time
# 获取当前活跃窗口
active_window = gw.getActiveWindow()# 打印窗口标题
print("当前活跃窗口标题:", active_window.title)# 获取所有打开窗口的列表
all_windows = gw.getAllWindows()# 打印窗口标题
for window in all_windows:print("窗口标题:", window.title)# 根据标题获取窗口列表
windows = gw.getWindowsWithTitle("松实现窗口自动化:pygetwindow库实战指南-CSDN博客 - 360极速浏览器X 22.3")# 打印第一个窗口的标题
if windows:print("找到的窗口标题:", windows[0].title)
else:print("未找到窗口")# getActiveWindow():获取当前活跃窗口。
# getAllWindows():获取所有打开窗口的列表。
# getWindowsWithTitle(title):根据标题获取窗口列表。
# getWindowsAt(x, y):获取位于给定屏幕坐标处的窗口。# 根据标题获取窗口
window = gw.getWindowsWithTitle("C:\\Users\\Administrator\\Desktop\\直播语句.txt - Notepad++ [Administrator]")[0]# 激活窗口
window.activate()# 最小化窗口
window.minimize()
time.sleep(5) # 最大化窗口
window.maximize()
time.sleep(5) # 将最大化/最小化的窗口还原
window.restore()
time.sleep(5) # 获取窗口大小
print("窗口大小:", window.size)# 设置窗口大小
window.resizeTo(800, 600)# 获取窗口位置
print("窗口位置:", window.topleft)# 设置窗口位置
window.moveTo(100, 100)# 关闭窗口
# window.close()
pyautogui 键盘操作
# pip install pyautogui
# pip install opencv-pythonimport pyautogui# 获取当前鼠标位置
print(pyautogui.position())
# 获取当前屏幕的分辨率
print(pyautogui.size())
# 判断某个坐标是否在屏幕上
x=10
y=20
print(pyautogui.onScreen(x, y)) # 在每次调用PyAutoGUI的函数后设置2.5秒的暂停
# 暂停2.5s
pyautogui.PAUSE = 2.5# 鼠标移动
# 用num_seconds(秒)将鼠标移动到(x,y)位置
x = 200
y = 100
num_seconds = 1
pyautogui.moveTo(x, y, duration=num_seconds)
# 鼠标拖动是指按下鼠标左键移动鼠标
# pyautogui.dragTo(x, y, duration=num_seconds) # 用num_seconds(秒)将鼠标从当前位置向右移动xOffset,向下移动yOffset
# 如果duration为0或未指定,则立即移动。
xOffset = 30
yOffset = -50
num_seconds = 0.5
pyautogui.moveRel(xOffset, yOffset, duration=num_seconds) # 鼠标单击
# 将鼠标移动到(moveToX,moveToY)位置,点击鼠标num_of_clicks次,每次点击间隔secs_between_clicks秒
# button表示单击方式,'left'左键单击,'middle'中键单击,'right'右键单击
moveToX = 500
moveToY = 600
num_of_clicks = 1
secs_between_clicks = 1
pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left')moveToX = 10
moveToY = 20
# 右键单击
pyautogui.rightClick(x=moveToX + 50, y=moveToY)
# 中键单击
pyautogui.middleClick(x=moveToX + 50, y=moveToY)
# 左键双击
pyautogui.doubleClick(x=moveToX + 50, y=moveToY)
# 左键三击
pyautogui.tripleClick(x=moveToX + 50, y=moveToY)# 鼠标滚动
moveToX = 100
moveToY = 200
# 鼠标在当前位置向下滑动100格
# pyautogui.scroll(clicks=-100)
# 鼠标移动到(moveToX,moveToY)位置,然后向上滚动150格
pyautogui.scroll(clicks=150, x=moveToX, y=moveToY)# 鼠标按下
# 鼠标移动到(moveToX,moveToY)位置,鼠标左键按下
pyautogui.mouseDown(x=moveToX, y=moveToY, button='left')
# 鼠标移动到(moveToX,moveToY)位置,鼠标右键松开(按下右键的情况下)
pyautogui.mouseUp(x=moveToX, y=moveToY, button='right')
# 鼠标在当前位置,按下中键
pyautogui.mouseDown(button='middle')# 缓动/渐变(Tween / Easing)函数
print(pyautogui.ease*?)moveToX = 100
moveToY = 100
# #开始慢,结束快
pyautogui.moveTo(moveToX + 5 , moveToY+ 45, 2, pyautogui.easeInQuad)
# 开始快,结束慢
pyautogui.moveTo(moveToX + 15, moveToY+ 35, 2, pyautogui.easeOutQuad)
# 快速开始和结束,中间缓慢
pyautogui.moveTo(moveToX + 25, moveToY+ 25, 2, pyautogui.easeInOutQuad)
# 最后反弹
pyautogui.moveTo(moveToX + 35, moveToY+ 15, 2, pyautogui.easeInBounce)
# 反复横跳
pyautogui.moveTo(moveToX + 45, moveToY+ 5, 2, pyautogui.easeInElastic) # 键盘函数x = 300
y = 300
num_seconds = 1
pyautogui.moveTo(x, y, duration=num_seconds)
pyautogui.click(x=x, y=y, clicks=1, interval=1, button='left')# 在当前位置输入文字text,每个字符输入间隔secs_between_keys秒
# \n表示换行
text = 'Hello world!\n'
secs_between_keys = 0.1
pyautogui.typewrite(message=text, interval=secs_between_keys)
# 在当前位置按下键盘各种键
# pyautogui.typewrite(['\t', 'a', 'b', 'c', 'left', 'backspace', 'enter', 'f1','\n'], interval=secs_between_keys)
# 查看所有支持按键
# print(pyautogui.KEYBOARD_KEYS)# 快捷键
# ctrl+c 复制文字
pyautogui.hotkey('ctrl', 'c')
# ctrl+v 粘贴文字
pyautogui.hotkey('ctrl', 'v') # 按下ctrl键
pyautogui.keyDown('ctrl')
# 按下v键,相当文字粘贴
pyautogui.keyDown('v')
# 松开ctrl键盘
pyautogui.keyUp('ctrl')# 按下shift键
pyautogui.keyDown('shift')
pyautogui.press('left')
pyautogui.press('left')
pyautogui.press('left')
# 松开shift键
pyautogui.keyUp('shift')# 消息框函数
# 警告窗口
alert_result = pyautogui.alert('点击确定返回字符串OK')
# 确认窗口
confirm_result = pyautogui.confirm('点击确定返回字符串OK,点击取消返回字符串Cancel')
# 点击ok保存输入的文字,点击Cancel返回None
prompt_result = pyautogui.prompt('输入文字')
# 点击ok保存输入的密码,点击Cancel返回None
# default默认文字,mask用什么符号代替输入的密码
password_result = pyautogui.password(text='', title='', default='', mask='*')# 截屏
# 截屏返回result对象
d1 = 'C:/Users/Administrator/Desktop/result1.jpg'
d2 = 'C:/Users/Administrator/Desktop/result2.jpg'
result = pyautogui.screenshot()
# result是PIL中的Image对象
print(type(result))
# 保存图像
result.save(d1)
# 展示图片
# result.show()# imageFilename参数设置文件保存为止,在截屏前保存图片到本地foo.png文件
# region设置截图区域[x,y,w,h],以(x,y)为左上角顶点,截宽w,高h的区域
result = pyautogui.screenshot(imageFilename=d2,region=[10,20,100,50])
pyautogui.PAUSE = 2.5# 图像定位
# 在屏幕返回和result1.jpg图片类似的区域坐标,返回值(左上角x坐标,左上角y坐标,宽度,高度)
# 如果没找到返回None
# confidence 需要 pip install opencv-python
result = pyautogui.locateOnScreen(d2, confidence=0.9)
# Box(left=0, top=0, width=1680, height=1050)
print(result) # 在屏幕返回和result1.jpg图片类似的区域中间位置的XY坐标,confidence返回区域最低置信度
result = pyautogui.locateCenterOnScreen(d2, confidence=0.9)
print(result)
# 为查找图片找到的所有位置返回一个生成器
results = pyautogui.locateAllOnScreen(d2, confidence=0.6)# 打印各组的(左上角x坐标,左上角y坐标,宽度,高度)
# for i in results:
# print(i)
# 将结果保存为list
# list_result = list(pyautogui.locateAllOnScreen(d2, confidence=0.6))# 在haystackImage中,返回和image图片最类似区域的坐标
result = pyautogui.locate(needleImage=d2, haystackImage=d1, confidence=0.5)
print(result)
# 在haystackImage中,返回和image图片所有类似区域的坐标(left, top, width, height)
results = pyautogui.locateAll(needleImage=d2, haystackImage=d1, confidence=0.5)
# print(result)
# for i in results:
# print(i)
Selenium 浏览器操作
# Selenium 是一个用于自动化 Web 浏览器操作的工具集。
# pip3 install selenium
# pip show selenium# 桌面 pywinauto、pyautogui、win32gui# 不同的浏览器需要不同的驱动,以下是常见浏览器的驱动下载地址:
# Chrome: ChromeDriver,ChromeDriver 的说明参见:ChromeDriver 介绍。 驱动chromedriver.exe 放入环境变量
# Firefox: GeckoDriver
# Edge: EdgeDriver# 导入 Selenium
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChainsservice = ChromeService()
options = webdriver.ChromeOptions()# 设置 Chrome 无头模式 不打开浏览器
#options = Options()
#options.add_argument("--headless") # 启用无头模式
#options.add_argument("--disable-gpu") # 禁用 GPU 加速driver = webdriver.Chrome(service=service, options=options)"""# 打开网页
driver.get('https://www.baidu.com')# 最大化窗口
driver.maximize_window()# 等待页面加载完成
time.sleep(10)
# 可以根据需要调整等待时间# 强制停止页面加载
driver.execute_script("window.stop();")# 获取页面标题和 URL
print("页面标题:", driver.title)
print("当前 URL:", driver.current_url)# 导航到另一个页面
driver.get("https://www.runoob.com/docker/docker-tutorial.html")# 获取页面标题和 URL
print("页面标题:", driver.title)
print("当前 URL:", driver.current_url)# 返回上一个页面
driver.back()# 获取页面标题和 URL
print("页面标题:", driver.title)
print("当前 URL:", driver.current_url)# 刷新页面
driver.refresh()# ID元素定位
element = driver.find_element(By.ID, "chat-textarea")print("id属性:", element.get_attribute("id"))
print("text属性:", element.text)
# 输入文本
element.send_keys("你好")# 通过 Class Name
element = driver.find_element(By.CLASS_NAME, "chat-input-container")# 通过 CSS 选择器定位
element = driver.find_element(By.CSS_SELECTOR, "div#chat-input-area")# 通过 XPath 定位
# element = driver.find_element(By.XPATH, "//input[@id='chat-input-area']")# 使用 JavaScript 定位
element = driver.execute_script("return document.getElementById('chat-input-area');")print("id属性:", element.get_attribute("id"))
print("text属性:", element.text)# 关闭浏览器
driver.quit()"""driver.get('https://www.baidu.com/?tn=88093251_138_hao_pg')
driver.maximize_window()
time.sleep(10) # 鼠标和键盘操作
# 创建 ActionChains 对象
actions = ActionChains(driver)element = driver.find_element(By.XPATH, "/html/body/div/div/div[4]/div/div[1]/div/div[2]/div[1]/div[2]/button[1]")actions.move_to_element(element).perform()
element.click()time.sleep(5) element = driver.find_element(By.XPATH, "/html/body/div/div/main/div/div/div/div[3]/form/div[1]/div[2]/div/input")
element.send_keys("ffff")time.sleep(2) element = driver.find_element(By.XPATH, "/html/body/div/div/main/div/div/div/div[3]/form/div[2]/div[2]/div/input")
element.send_keys("123456")
time.sleep(2) element = driver.find_element(By.XPATH, "/html/body/div/div/main/div/div/div/div[3]/form/div[3]/div/label/span[1]")
# element.click()
# 使用move_to方法移动到元素
actions.move_to_element(element).perform()
time.sleep(2)
actions.click(element).perform()
time.sleep(2) element = driver.find_element(By.XPATH, "/html/body/div/div/main/div/div/div/div[3]/form/div[4]/div/button[1]")
element.click()
time.sleep(2) time.sleep(10) # 关闭浏览器
driver.quit()