CodeGym /课程 /Python SELF ZH /设置脚本以自动化网站上的操作步骤

设置脚本以自动化网站上的操作步骤

Python SELF ZH
第 37 级 , 课程 4
可用

1. 操作脚本及其顺序

当我们开始规划自动化脚本时,重要的是要明白,需要从简单到复杂,像讲故事一样。想象一下,你的脚本是个英雄,正在网站页面上旅行。每一步都经过精心设计,确保不会走偏。

创建分步骤的自动化脚本

首先需要制定计划。你想实现什么?加载页面、填写表单、点击按钮?就像人们常说的:“不计划就是在计划失败”。我们当然不想失败,所以让我们把预期的步骤列出来。

Python

from selenium import webdriver
from selenium.webdriver.common.by import By

# 创建驱动实例。使用适合您浏览器的驱动。
driver = webdriver.Chrome()

# 打开页面
driver.get('https://example.com/login')

# 填写用户名
driver.find_element(By.NAME, 'username').send_keys('my_username')

# 填写密码
driver.find_element(By.NAME, 'password').send_keys('my_secure_password')

# 点击登录按钮
driver.find_element(By.ID, 'login-button').click()

这样我们就为我们的舞步定好了节奏。脚本会按顺序执行每一步,这样脚本就能够顺利地操作网站。

记录执行步骤

就像一个值得尊敬的英雄,我们的脚本也需要留下痕迹,让我们知道它去了哪里、做了什么。日志记录就是脚本的日记。它能够帮助跟踪步骤的执行情况,如果有什么地方出了问题,可以发现问题所在。

Python

import logging

# 设置日志记录
logging.basicConfig(level=logging.INFO)

# 记录操作示例
logging.info("打开登录页面")
driver.get('https://example.com/login')

日志记录不仅有助于调试,还能让你心里有底,知道脚本正确执行了每一步。如果突然出了问题,你可以回去看日志,找到出问题的地方。

2. 代码的组织与修改

当脚本变得复杂时,保持代码整洁就非常重要了。想象一下,有一个庆典,来宾和食物一大堆,如果一切都没有摆放整齐,那就会一团乱。在代码里也是一样,乱糟糟不利于维护。

代码结构的设置

为了减少修改代码的成本,代码需要组织有序。就像整理袜子一样,一切都需要分类清楚。可以使用函数将重复的操作提取到单独的模块中。

Python

def login_to_site(driver, username, password):
    logging.info("输入用户名")
    driver.find_element(By.NAME, 'username').send_keys(username)
    
    logging.info("输入密码")
    driver.find_element(By.NAME, 'password').send_keys(password)
    
    logging.info("点击登录按钮")
    driver.find_element(By.ID, 'login-button').click()

# 使用函数登录
login_to_site(driver, 'my_username', 'my_secure_password')

使用函数能够让代码更整洁,也更容易做更改。例如,如果登录按钮的ID发生了变化,只需要在函数中修改,而不需要在整个代码中找。

3. 示例:自动化网站购买流程

假设我们需要设置购买流程的自动化,步骤如下:

  1. 打开网站并登录账户。
  2. 进入商品目录并将商品加入购物车。
  3. 进入购物车并完成购买。
Python

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化带有设置的驱动
def initialize_driver():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)  # 隐式等待
    return driver

# 登录账户的函数
def login(driver, username, password):
    driver.get("https://example.com")
    driver.find_element_by_id("username").send_keys(username)
    driver.find_element_by_id("password").send_keys(password)
    driver.find_element_by_id("login_button").click()

# 进入商品目录并添加商品到购物车的函数
def add_product_to_cart(driver):
    driver.get("https://example.com/catalog")
    product = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "product_item"))
    )
    product.click()

    add_to_cart_button = driver.find_element_by_id("add_to_cart")
    add_to_cart_button.click()

# 进入购物车并完成购买的函数
def checkout(driver):
    driver.get("https://example.com/cart")
    checkout_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "checkout"))
    )
    checkout_button.click()

# 关闭驱动的函数
def close_driver(driver):
    driver.quit()

# 执行操作序列的主脚本
def main():
    # 设置数据
    username = "myusername"
    password = "mypassword"
    
    # 初始化驱动
    driver = initialize_driver()
    
    try:
        # 登录网站
        login(driver, username, password)
        
        # 进入目录并添加商品到购物车
        add_product_to_cart(driver)
        
        # 进入购物车并完成购买
        checkout(driver)
    
    finally:
        # 关闭驱动
        close_driver(driver)

# 运行主脚本
main()

函数解释

  1. initialize_driver() — 初始化WebDriver的函数。 它为所有元素设置了隐式等待并返回驱动对象。
  2. login() — 登录网站的函数。它接收usernamepassword参数,用于填写登录表单并点击按钮。
  3. add_product_to_cart() — 用于进入目录、选择商品并将其添加到购物车的函数。
  4. checkout() — 用于进入购物车并完成购买的函数。
  5. close_driver() — 用于关闭驱动的函数。
  6. main() — 管理操作顺序的主函数。在这里调用了所有步骤,还传递了登录数据。

这种方法的优点

  1. 可读性 — 每个步骤都打包成独立的函数,方便理解代码。
  2. 可重用性 — 单独的函数可以在主脚本之外独立使用,例如执行网站上的单个操作。
  3. 测试简单性 — 可以分别测试每个步骤,确保所有功能正常。
  4. 灵活性 — 如果需要可以添加其他函数或更改main()内的调用顺序。
1
调查/小测验
优化 Selenium 脚本第 37 级,课程 4
不可用
优化 Selenium 脚本
优化 Selenium 脚本
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION