【Python】selenium自动化测试网页的基础操作

文章目录

  • 引言
  • 一、相关下载安装与环境配置
  • 二、selenium入门操作
    • 2.1 加载网页与关闭网页
    • 2.2 定位元素
    • 2.3 操作元素
      • 2.3.1 代码——百度
  • 三、selenium其他操作
    • 3.1 无头浏览器
      • 3.1.1 示例代码——新浪网
    • 3.2 窗口切换
      • 3.2.1 切换到新打开的窗口或标签页
      • 3.2.2 切换到特定的窗口或标签页
      • 3.2.3 切换到框架或内嵌页面
      • 3.2.4 切换到弹出窗口(Alert)
      • 小结
    • 3.3 页面等待
      • 3.3.1 隐式等待 (Implicit Wait)
      • 3.3.2 显式等待 (Explicit Wait)
      • 3.3.3 区别和使用建议
  • 综合练习——selenium控制播放网易云音乐
  • 总结


【Python】selenium自动化测试网页的基础操作_第1张图片

引言

Selenium 是一个用于自动化 web 浏览器的工具。它可以模拟用户在浏览器中的各种操作,如点击、输入文本、导航等,从而帮助你进行自动化测试、数据抓取和网页操作等任务。以下列举一些应用场景:

自动化测试:自动化测试是 Selenium 最常见的用例之一。它允许你编写测试脚本来模拟用户的操作,测试 web 应用的功能是否正常。

数据抓取:Selenium 可以用于抓取网页上的数据,特别是那些使用 JavaScript 动态加载内容的网站。它能处理动态内容和复杂的用户交互,这比使用纯粹的 HTTP 请求要方便得多。

网站交互:你可以使用 Selenium 自动化一些重复性的网页操作,比如填充表单、点击按钮、导航等。

性能监控:Selenium 可以用于性能测试,通过模拟用户行为来监控网页的加载时间和响应速度。

学习和实验:Selenium 也可以用于学习如何与网页交互,帮助开发者理解前端技术。

提示:以下是本篇文章正文内容,下面内容可供参考

一、相关下载安装与环境配置

在学习selenium操作时,我们需要将selenium库及对应浏览器驱动配置好。可以参考下面链接进行安装配置:
详细流程——selenium+Edge浏览器驱动下载

二、selenium入门操作

2.1 加载网页与关闭网页

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

driver = webdriver.Edge()
driver.get('https://www.baidu.com')

# 等待十秒,关闭浏览器
time.sleep(10)
driver.quit()

2.2 定位元素

find_element() 方法是 Selenium WebDriver 的一种通用方式来查找单个元素。你可以使用它配合不同的定位策略。示例如下:

1.通过 ID 查找:

element = driver.find_element(By.ID, "element_id")

2.通过类名查找:

element = driver.find_element(By.CLASS_NAME, "class_name")

3.通过名称查找:

element = driver.find_element(By.NAME, "element_name")

4.通过 XPath 查找:

element = driver.find_element(By.XPATH, "//tag[@attribute='value']")

5.通过 CSS 选择器查找:

element = driver.find_element(By.CSS_SELECTOR, "css_selector")

注意:在使用 find_element() 时,需要先导入 By 模块:

from selenium.webdriver.common.by import By

2.3 操作元素

在 Selenium 中,操作元素的方法包括点击、输入文本、获取属性值等。下面是一些常用的方法和示例:

  1. 点击元素
element.click()
  1. 输入文本
element.send_keys("text")
  1. 清除输入框
element.clear()
  1. 获取元素的文本内容
text = element.text
  1. 获取元素的属性值
attribute_value = element.get_attribute("attribute_name")
  1. 获取元素的 CSS 属性值
css_value = element.value_of_css_property("property_name")
  1. 获取元素的标签名
tag_name = element.tag_name
  1. 获取元素的坐标位置
location = element.location  # 返回一个包含 x 和 y 的字典
  1. 获取元素的大小
size = element.size  # 返回一个包含 width 和 height 的字典
  1. 判断元素是否可见
is_displayed = element.is_displayed()

2.3.1 代码——百度

代码如下(示例):

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


driver = webdriver.Edge()
driver.get('https://www.baidu.com')
el0 = driver.find_element(by=By.XPATH, value='//*[@id="kw"]')
el0.send_keys("what can I say")
el1 = driver.find_element(By.XPATH, value='//*[@id="su"]')
el1.click()
time.sleep(10)
driver.quit()

三、selenium其他操作

3.1 无头浏览器

Selenium 支持无头浏览器模式,这样可以在后台运行浏览器而不显示图形用户界面。这对于运行自动化测试或进行网页抓取时特别有用。无头浏览器可以显著提高测试运行速度,并节省系统资源。

3.1.1 示例代码——新浪网

from selenium import webdriver
from selenium.webdriver.edge.options import Options

# 创建 Edge 配置对象
edge_options = Options()
edge_options.add_argument("--headless")  # 启用无头模式

# 启动 Edge 浏览器
driver = webdriver.Edge(options=edge_options)

# 打开网页
driver.get("https://news.sina.com.cn/")

# 进行操作
print(driver.title)  # 打印网页标题

# 关闭浏览器
driver.quit()

3.2 窗口切换

在 Selenium 中,窗口切换是一个常见操作,尤其是在处理多个浏览器窗口或标签页时。Selenium 提供了一些方法来帮助你在这些窗口或标签页之间切换。下面是一些常用的窗口切换方法及其示例:

3.2.1 切换到新打开的窗口或标签页

当你点击一个链接或按钮时,它可能会打开一个新的窗口或标签页。你可以使用 window_handles 方法获取所有打开的窗口句柄,然后切换到新窗口。

示例代码:

from selenium import webdriver

# 启动浏览器
driver = webdriver.Edge()

# 打开网页
driver.get("https://www.example.com")

# 保存当前窗口句柄
original_window = driver.current_window_handle

# 执行会打开新窗口的操作(例如点击链接)
driver.find_element(By.LINK_TEXT, "Open New Window").click()

# 获取所有窗口句柄
all_windows = driver.window_handles

# 切换到新打开的窗口
for window in all_windows:
    if window != original_window:
        driver.switch_to.window(window)
        break

# 进行操作
print(driver.title)  # 打印新窗口的标题

# 关闭新窗口
driver.close()

# 切换回原窗口
driver.switch_to.window(original_window)

# 关闭浏览器
driver.quit()

3.2.2 切换到特定的窗口或标签页

如果你知道要切换到哪个窗口,可以使用 switch_to.window 方法直接切换到目标窗口的句柄。

# 获取所有窗口句柄
all_windows = driver.window_handles

# 假设我们要切换到第一个窗口
driver.switch_to.window(all_windows[0])

3.2.3 切换到框架或内嵌页面

在有嵌套框架 iframe 的情况下,你可以切换到特定的框架进行操作。

# 切换到指定的框架(通过框架的名称或 ID)
driver.switch_to.frame("frame_id_or_name")

# 在框架内执行操作
driver.find_element(By.ID, "element_inside_frame").click()

# 切换回主文档
driver.switch_to.default_content()

3.2.4 切换到弹出窗口(Alert)

如果你需要处理浏览器弹出的警告框或确认框,你可以使用 switch_to.alert 方法。

from selenium.webdriver.common.alert import Alert

# 触发弹出警告框
driver.find_element(By.ID, "trigger_alert").click()

# 切换到警告框
alert = driver.switch_to.alert

# 获取警告框文本
print(alert.text)

# 接受警告框
alert.accept()

# 关闭浏览器
driver.quit()

小结

window_handles:获取所有窗口句柄。
switch_to.window(handle):切换到指定窗口。
switch_to.frame(name_or_id):切换到指定框架。
switch_to.default_content():切换回主文档。
switch_to.alert:切换到弹出的警告框。
这些方法可以帮助你在不同的窗口、标签页、框架和弹出窗口之间进行切换,使得自动化操作更加灵活和全面。

3.3 页面等待

在 Selenium 中,有两种主要的页面等待方式:隐式等待和显式等待。

3.3.1 隐式等待 (Implicit Wait)

隐式等待设置了一个全局的等待时间,Selenium 会在查找元素时等待指定的时间,直到元素出现为止。如果在超时时间内找到了元素,则立即继续执行,如果超时则抛出异常。
示例代码:

from selenium import webdriver

# 启动浏览器
driver = webdriver.Chrome()

# 设置隐式等待时间
driver.implicitly_wait(10)  # 等待最多 10 秒

# 打开网页
driver.get("https://www.example.com")

# 查找元素
element = driver.find_element(By.ID, "element_id")

# 关闭浏览器
driver.quit()

3.3.2 显式等待 (Explicit Wait)

显式等待是一种更精确的等待方式,用于等待特定的条件成立。你可以设置条件,比如元素可见、元素可点击等,直到条件成立或超时。

示例代码:

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

# 启动浏览器
driver = webdriver.Chrome()

# 打开网页
driver.get("https://www.example.com")

# 创建 WebDriverWait 对象
wait = WebDriverWait(driver, 10)  # 最长等待 10 秒

# 等待元素可见
element = wait.until(EC.visibility_of_element_located((By.ID, "element_id")))

# 进行操作
element.click()

# 关闭浏览器
driver.quit()

3.3.3 区别和使用建议

隐式等待:适用于所有查找操作,简单易用,但无法精确控制等待条件。
显式等待:适用于需要等待特定条件的操作,更加灵活和精确,适合处理动态页面元素。
通常,显式等待比隐式等待更具针对性和灵活性,建议在处理复杂页面加载时优先使用显式等待。

综合练习——selenium控制播放网易云音乐

结合selenium的相关基础知识,我们可以进行控制浏览器播放网易云音乐热歌榜歌曲的综合小练习。首先加载Edge浏览器,然后向搜索框输入搜索网易云音乐,再进行元素定位点击进入网易云音乐网站,进入热歌榜。注意网易云音乐网站内有嵌套框架iframe,我们需要在框架内定位播放按钮并点击,这就是整个代码的过程。下面代码可以正常运行,但代码有很大优化空间,如:封装函数,优化等待。

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


driver = webdriver.Edge()
driver.get('https://www.baidu.com')
el0 = driver.find_element(by=By.XPATH, value='//*[@id="kw"]')
el0.send_keys("网易云音乐")
el1 = driver.find_element(By.XPATH, value='//*[@id="su"]')
el1.click()
time.sleep(3)
el3 = driver.find_element(By.XPATH, value='//*[@id="1"]/div/h3/a[1]')
el3.click()
# 跳转至最新窗口
all_windows = driver.window_handles
driver.switch_to.window(all_windows[-1])
time.sleep(3)
# 页面内寻找
el4 = driver.find_element(By.XPATH, value='//*[@id="g_nav2"]/div/ul/li[2]/a')
el4.click()
time.sleep(2)

# 在iframe框架内执行操作
driver.switch_to.frame("contentFrame")
driver.find_element(By.XPATH, '//*[@id="toplist"]/div[1]/div/ul[1]/li[4]/div/p[1]/a').click()
time.sleep(3)
# 寻找并点击播放键
driver.find_element(By.XPATH, '//*[@id="toplist"]/div[2]/div/div[1]/div/div[2]/div/div[3]/a[1]').click()

总结

以上是本文介绍selenium自动化测试网页基础操作的内容,Selenium 是一个功能强大且灵活的工具,适用于 Web 应用程序的自动化测试。然而,它也有一些局限性,如速度慢和处理动态内容的复杂性。选择是否使用 Selenium 需要根据项目的需求和环境来决定。

你可能感兴趣的:(Python,python,selenium,测试工具)