Python - 自动化教程



使用 Python 进行自动化

使用 Python 进行自动化涉及使用编程技术自动执行任务,通常无需人工干预。Python 提供了各种库,使其成为自动化不同类型重复性任务的强大工具,包括任务调度、网络抓取、GUI 自动化等等。

利用 Python 丰富的库,可以创建适合特定需求的自动化解决方案。

Python 自动化库

以下是几个常用 Python 自动化库:

  • unittest − Python 中的单元测试框架。

  • Selenium − 用于跨不同浏览器测试 Web 应用程序的 Web 自动化框架。

  • Beautiful Soup − 用于解析 HTML 和 XML 文档的库,用于网络抓取。

  • pandas − 数据操作库,可用于自动化数据分析任务。

  • requests − 用于发送 HTTP 请求和处理响应的 HTTP 库。

  • Selenium − 用于跨不同浏览器测试 Web 应用程序的 Web 自动化框架。

  • PyAutoGUI − 用于模拟鼠标和键盘操作的 GUI 自动化库。

在本教程中,您将学习使用 Python 进行自动化的各个方面,从使用schedule模块调度任务,到使用BeautifulSoup进行网络抓取,以及使用BeautifulSoup进行 GUI 自动化。

这里我们提供了一些实践示例,请确保在您本地系统中执行提供的代码之前,已安装必要的模块。您可以在命令提示符中使用以下命令安装:

pip install schedule
pip install beautifulsoup4
pip install pyautogui

使用“schedule”模块进行 Python 自动化

Python 中的schedule模块允许您计划任务在指定的时间间隔或时间自动运行。它非常适合自动化重复性任务,例如作业调度、定期任务或基于时间的事件。

示例

此示例演示了如何使用 Python 自动化日常任务,例如使用 Python 的schedule模块调度每周会议、设置闹钟等。

import schedule
import time

# Function definitions for scheduled tasks
def alarm():
   print("Time to restart the server   ")

def job():
   print("Starting daily tasks   ")

def meet():
   print('Weekly standup meeting   ')

# Schedule tasks
schedule.every(5).seconds.do(alarm)  # Run every 5 seconds
schedule.every().day.at("10:30").do(job)  # Run daily at 10:30 AM
schedule.every().monday.at("12:15").do(meet)  # Run every Monday at 12:15 PM

# Main loop to execute scheduled tasks
while True:
   schedule.run_pending()
   time.sleep(0.5)

输出

执行上述代码后,您将获得以下输出:

Time to restart the server   
Time to restart the server   
Time to restart the server 
...

Python 网络抓取

网络抓取是一个简单的自动化任务示例。它是一个自动从网站提取信息的流程。此技术涉及获取网页并从 HTML 内容中提取所需的数据。

网络抓取广泛用于数据挖掘、数据分析和需要从网络收集信息的自动化任务。

示例

此示例演示了如何使用BeautifulSoupurllib.request模块抓取网页以获取包含关键字“python”的 URL。

from bs4 import BeautifulSoup
from urllib.request import urlopen
import re

html = urlopen("https://tutorialspoint.com/python/index.htm")
content = html.read()
soup = BeautifulSoup(content, "html.parser")
for a in soup.findAll('a',href=True):
   if re.findall('python', a['href']):
      print("Python URL:", a['href'])

输出

执行上述代码后,您将获得以下输出:

Python URL: /machine_learning_with_python/index.htm
Python URL: /python_pandas/index.htm
Python URL: /python/index.htm
Python URL: /python/index.htm
Python URL: /python_pandas/index.htm
Python URL: /python_pillow/index.htm
Python URL: /machine_learning_with_python/index.htm
Python URL: /python_technologies_tutorials.htm
Python URL: /python/index.htm
....

使用“pyautogui”自动执行鼠标移动

pyautogui模块允许您的 Python 脚本自动执行鼠标移动、键盘输入和窗口交互,可用于测试 GUI 应用程序或自动化重复性桌面任务。

示例

此示例演示了如何使用 Python 的pyautogui模块以方形图案自动执行鼠标移动。

import pyautogui

# Move the mouse in a larger square pattern
for i in range(5):
   pyautogui.moveTo(300, 100, duration=0.25)   
   pyautogui.move(300, 0, duration=0.25)       
   pyautogui.move(0, 300, duration=0.25)       
   pyautogui.move(-300, 0, duration=0.25)      
   pyautogui.move(0, -300, duration=0.25)      

输出

执行上述代码后,您将获得以下输出:

Python Automation

自动执行 Python 中的单元测试

Python 中的 unittest 模块用于自动化测试。自动化单元测试是指编写单个代码单元(例如函数或方法)的测试,并自动运行这些测试以确保它们按预期执行。

Python 中的unittest模块是一个内置库,它提供了一个用于创建和运行自动化测试的框架。

示例

此示例演示了如何在 Python 中使用unittest模块对字符串方法执行自动化测试。每个测试用例方法都以test_为前缀开头,unittest框架将其识别为要运行的方法。

# importing unittest module
import unittest

class TestingStringMethods(unittest.TestCase):
   # string equal
   def test_string_equality(self):
      # if both arguments are then it's succes
      self.assertEqual('ttp' * 5, 'ttpttpttpttpttp')
   
   # comparing the two strings
   def test_string_case(self):
      # if both arguments are then it's succes
      self.assertEqual('Tutorialspoint'.upper(), 'TUTORIALSPOINT')

   # checking whether a string is upper or not
   def test_is_string_upper(self):
      # used to check whether the statement is True or False
      self.assertTrue('TUTORIALSPOINT'.isupper())
      self.assertFalse('TUTORIALSpoint'.isupper())
      
   def test_string_startswith(self):
       # Used the startswith() to identify the start of the string
       self.assertTrue('tutorialspoint'.startswith('putor'))
       self.assertFalse('tutorialspoint'.startswith('point'))
       
# running the tests
unittest.main(verbosity=2)

输出

执行上述代码后,您将获得以下输出:

test_is_string_upper (__main__.TestingStringMethods) ... ok
test_string_case (__main__.TestingStringMethods) ... ok
test_string_equality (__main__.TestingStringMethods) ... ok
test_string_startswith (__main__.TestingStringMethods) ... FAIL

======================================================================
FAIL: test_string_startswith (__main__.TestingStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "main.py", line 23, in test_string_startswith
    self.assertTrue('tutorialspoint'.startswith('putor'))
AssertionError: False is not true

----------------------------------------------------------------------
Ran 4 tests in 0.000s

FAILED (failures=1)
广告