Python 简明教程

Python - Automation Tutorial

Automation using Python

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

通过利用 Python 的大量库,可以创建适用于特定需求的自动化解决方案。

Python Libraries for Automation

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

  1. * unittest* − Python 中的单元测试框架。

  2. * Selenium* − 用于跨不同浏览器对 Web 应用程序进行测试的 Web 自动化框架。

  3. * Beautiful Soup* − 用于解析 HTML 和 XML 文档的库,用于网页抓取。

  4. * pandas* − 数据处理库,用于自动化数据分析任务。

  5. * requests* − HTTP 库,用于发送 HTTP 请求和处理响应。

  6. * Selenium * − 用于跨不同浏览器对 Web 应用程序进行测试的 Web 自动化框架。

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

在本教程中,您将了解使用 Python 进行自动化的各个方面,包括使用 schedule 模块进行任务调度、使用 BeautifulSoup 进行网页抓取,以及使用 BeautifulSoup 进行 GUI 自动化。

此处我们提供了实际示例,请确保在使用以下命令在命令提示符中执行本地系统中的提供的代码之前,安装了必要的模块:

pip install schedule
pip install beautifulsoup4
pip install pyautogui

Python Automation with "schedule" Module

Python 中的 schedule 模块允许安排任务在指定的时间间隔或时间自动运行。它是自动化重复性任务(比如作业调度、定期任务或基于时间事件)的理想选择。

Example

此示例演示了使用 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 Web Scraping

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

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

Example

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

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

html = urlopen("https://www.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'])

Output

执行上述代码,我们将得到以下输出 −

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
....

Automating Mouse Movements with "pyautogui"

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

Example

此示例演示了如何使用 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)

Output

执行上述代码,我们将得到以下输出 −

python automation

Automating Unit Testing in Python

Python 中的 unittest 模块用于自动化测试。自动化单元测试是为诸如函数或方法之类的代码各个单元编写测试,并自动运行这些测试以确保它们的行为符合预期。

Python 中的 unittest 模块是提供用于创建并运行自动化测试的框架的内置库。

Example

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

# 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)

Output

执行上述代码,我们将得到以下输出 −

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)