Python实现利用无头浏览器采集应用实现网页自动化测试的方法与案例分享

1. 概述

在软件测试当中,自动化测试是一种经常使用的技术手段,Python 作为一种脚本语言,被广泛应用于自动化测试的实现中。无头浏览器作为 Python 环境下实现自动化测试的重要组成部分,可以模拟用户在不同的操作系统、设备和浏览器环境下的行为,来测试网站或应用程序功能是否正确、稳定性是否良好。因此,本文主要介绍使用 Python 实现无头浏览器采集应用实现网页自动化测试的方法及案例分享。

2. 环境搭建

2.1 安装 Python

首先,需要安装 Python。在各个操作系统中都提供了官方的 Python 下载链接。以 Windows 操作系统为例,可以从官方网站下载对应版本的 Python。下载完成后,按照默认设置安装即可。

安装 Python 过程中要注意进行环境变量配置,以便后续在命令行中能够调用 Python 命令。

2.2 安装必要的库

接下来,需要安装必要的 Python 库。在无头浏览器采集应用实现网页自动化测试中,主要需要安装的库有:

requests:用于发送 HTTP 请求。

selenium:用于操作无头浏览器。

beautifulsoup4:用于解析 HTML 文档,提取所需的信息。

可以使用以下命令在命令行中安装这些库:

pip install requests selenium beautifulsoup4

在安装以上三个库之前,需要确保已经安装了 pip 工具。

3. 无头浏览器采集应用实现网页自动化测试的方法

3.1 远程访问无头浏览器

使用 Python 进行无头浏览器操作,需要先启动无头浏览器。可以在命令行中执行以下命令,启动 Chrome 无头浏览器:

google-chrome --headless --remote-debugging-port=9222

注意:在使用无头浏览器时,要确保所使用的浏览器版本和 chromedriver 版本匹配,否则会出现兼容性问题。可在官方网站下载对应版本的 chromedriver。

启动浏览器后,使用 Python 的 webdriver 模块中的 Remote 类,远程连接到无头浏览器,实现无头浏览器的自动化操作。

from selenium.webdriver import Chrome

from selenium.webdriver.chrome.options import Options

chrome_options = Options()

chrome_options.add_argument('--headless')

chrome_options.add_argument('--disable-gpu')

chrome_options.add_argument('--no-sandbox')

driver = Chrome(

options=chrome_options,

remote_url='http://127.0.0.1:9222'

)

上述代码中,--headless--disable-gpu 参数分别表示启动无头模式和禁用 GPU,--no-sandbox 参数可以使 Chrome 在 Docker 容器等“隔离”的环境下正常工作。

使用 Chrome 类创建浏览器对象,指定 remote_url 参数时会连接到之前启动的无头浏览器。

3.2 模拟用户操作

连接到浏览器后,便可以进行自动化操作。以模拟输入用户名和密码的方式登录 GitHub 为例,代码如下:

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.keys import Keys

url = 'https://github.com/login'

driver.get(url)

login_field = WebDriverWait(driver, 10).until(

EC.presence_of_element_located((By.NAME, 'login'))

)

login_field.send_keys('your_username')

passwd_field = WebDriverWait(driver, 10).until(

EC.presence_of_element_located((By.NAME, 'password'))

)

passwd_field.send_keys('your_password' + Keys.ENTER)

在代码中,首先通过 get 方法打开登录页面,用 presence_of_element_located 方法等待页面元素加载,并使用 send_keys 方法输入用户名和密码并提交。

其他的操作,比如模拟鼠标点击、滚动、截屏等,也可以通过类似的方式实现。自动化测试不仅可以节省人力,还能节省时间,提高测试效率。

4. 案例分享

下面是一个简单的案例,实现从知乎热榜上获取当前热门话题的标题、链接、摘要等信息,并将结果保存到本地文件中。

import requests

from bs4 import BeautifulSoup

from selenium.webdriver import Chrome

from selenium.webdriver.chrome.options import Options

url = 'https://www.zhihu.com/billboard'

def get_top_question():

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

resp = requests.get(url, headers=headers)

soup = BeautifulSoup(resp.content, 'html.parser')

chrome_options = Options()

chrome_options.add_argument('--headless')

chrome_options.add_argument('--disable-gpu')

chrome_options.add_argument('--no-sandbox')

driver = Chrome(

options=chrome_options,

remote_url='http://127.0.0.1:9222'

)

items = []

for item in soup.select('div.FeedItem'):

title = item.select_one('h2.ContentItem-title a')

summary = item.select_one('div.ContentItem-summary')

if title and summary:

title_url = 'https://www.zhihu.com' + title['href']

item_driver = driver

item_driver.get(title_url)

content_section = BeautifulSoup(item_driver.page_source, 'html.parser').select_one('.RichContent-inner')

item_driver.quit()

items.append({

'title': title.text.strip(),

'url': title_url,

'summary': summary.text.strip(),

'content': str(content_section),

})

driver.quit()

return items

def save_to_file(data):

with open('top_question.txt', 'w') as f:

for item in data:

f.write(item['title'] + '\n')

f.write(item['url'] + '\n')

f.write(item['summary'] + '\n')

f.write('\n-------------------------\n')

if __name__ == '__main__':

top_question = get_top_question()

save_to_file(top_question)

在代码中,get_top_question 函数使用 requests 库访问知乎热榜页面,使用 BeautifulSoup 解析 HTML 页面,获取热门话题的标题、链接、摘要等信息。然后使用 Chrome 类连接到无头浏览器,依次访问每个话题的链接,获取对应的内容,并将全部结果保存到本地文件中。

5. 总结

本文主要介绍了使用 Python 实现无头浏览器采集应用实现网页自动化测试的方法及案例分享。无头浏览器作为 Python 实现自动化测试的重要组成部分,可以模拟用户在不同的操作系统、设备和浏览器环境下的行为,来测试网站或应用程序功能是否正确、稳定性是否良好。Python 在自动化测试中的开发效率和简单易用性得到了越来越多的认可,值得深入学习和探究。

后端开发标签