CodeGym /课程 /Python SELF ZH /脚本结束与测试

脚本结束与测试

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

1. 结束会话

如何正确结束浏览器会话

所以,你写了一个超棒的脚本,它可以收集数据、点击按钮、在浏览器里完成一堆魔法操作。现在很重要的一步是,正确结束它的运行。 想象一下你的浏览器是一头慢吞吞的大象:你不能直接甩门就走。你得礼貌又冷静地关闭它。为此,请使用 quit() 方法。

Python

from selenium import webdriver

# 初始化浏览器驱动
driver = webdriver.Chrome()

# here your browsing magic happens... 🧙‍♂️

# 关闭浏览器
driver.quit()

方法 quit() 会关闭浏览器的所有窗口并结束会话。如果忘记调用它,可能会导致奇怪的情况,比如后台的浏览器进程还开着,同时还会有内存泄漏的问题。幸福的生活,谁不想要呢?

解决挂起的浏览器进程问题

有时候,用 Selenium 操作后,浏览器进程还会像犹豫不决的即时战略游戏单位一样停留在后台。这种情况可能发生在脚本在某处“崩了”的时候。 处理这种问题的方法之一就是批量结束进程,比如用 Python 里的 psutil 或者其他系统命令。

Python

import psutil

# 关闭所有挂起的 Chrome 进程
for proc in psutil.process_iter():
    # 检查进程是否属于浏览器
    if 'chrome' in proc.name().lower():
        proc.kill()

这不是最优雅的办法,但有时候进程变得无法控制时,也只能这样。记住,这样会杀死所有的浏览器进程,所以要理智使用。

2. 脚本测试

验证脚本中每一步是否正确

成功结束脚本只是一半的工作。还需要检查每一步是否都正确执行了。 为此,软件测试工具 非常有用,比如 unittestpytest。 你可以写测试来确保你的脚本能正常打开页面、点击按钮和收集数据。

来看一个用 unittest 编写的极简测试:

Python

import unittest
from selenium import webdriver

class TestBrowserAutomation(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()

    def test_open_page(self):
        self.driver.get("https://example.com")
        self.assertEqual("Example Domain", self.driver.title)

    def tearDown(self):
        self.driver.quit()

unittest.main()

这个测试检查了我们的脚本是否打开了 https://example.com,并且页面标题是否符合预期。 这是一个简单但非常强大的方式来确保脚本的关键部分工作正常。

调试与优化

有时候,即使写了测试,你的脚本还是像个任性的孩子一样拒绝好好干活。这时候就需要调试了。用 print() 输出中间值,来追踪到底哪里出了问题。当然,在代码里加点有趣的注释是可以的,但别忘了目标:弄清楚发生了什么。

比如你遇到了 some_element 页面元素不存在的问题:

Python

try:
    some_element = driver.find_element_by_id('missing-id')
except Exception as e:
    print(f"噢哟!出错了:{e}")

另外,密切关注脚本的性能。有时候为了优化,可以使用各种策略,比如降低请求频率或者优化查找元素的逻辑。

防止未来故障和错误

优化和调试后,你的脚本应该像瑞士手表一样精准地运行,但总会有新问题的风险。你可以用像 logging 这样的日志系统, 来记录脚本的运行情况。这能让你看到哪里出问题了,以及为什么出问题。

Python

import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

logger.info("脚本运行开始")

# 在这里记录更多操作...

logger.info("脚本运行结束")

记住,总应对意外事件有所准备,特别是当你在处理不稳定的数据或页面时。可以考虑加入重试和超时机制, 以防止脚本因小问题就停止运行。

1
任务
Python SELF ZH, 第 36 级, 课程 4
已锁定
结束浏览器会话
结束浏览器会话
2
任务
Python SELF ZH, 第 36 级, 课程 4
已锁定
关闭挂起的浏览器进程
关闭挂起的浏览器进程
3
任务
Python SELF ZH, 第 36 级, 课程 4
已锁定
编写用于浏览器自动化的单元测试
编写用于浏览器自动化的单元测试
4
任务
Python SELF ZH, 第 36 级, 课程 4
已锁定
在自动化脚本中进行日志记录和调试
在自动化脚本中进行日志记录和调试
1
调查/小测验
表单操作第 36 级,课程 4
不可用
表单操作
表单操作
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION