博客
关于我
用python操作浏览器的三种方式,详细介绍并附代码
阅读量:143 次
发布时间:2019-02-27

本文共 3868 字,大约阅读时间需要 12 分钟。

Selenium Python 测试自动化技巧

一、浏览器操作方法

1. 使用 Selenium 导入浏览器驱动

Selenium 是一个强大的自动化测试框架,可以通过调用 WebDriver 模块控制浏览器操作。以下是创建 Chrome 浏览器实例并打开指定页面的示例代码:

from selenium import webdriverimport timedriver = webdriver.Chrome()driver.implicitly_wait(5)  # 等待页面元素加载完成driver.get("http://www.baidu.com")  # 打开百度首页

2. 使用 Python 标准库 webbrowser

如果需要简单地控制浏览器,可以使用 Python 的 webbrowser 标准库。以下是打开 Internet Explorer 浏览器的示例代码:

import webbrowserwebbrowser.open("C:\\Program Files\\Internet Explorer\\iexplore.exe")  # 打开 IE 浏览器

3. 使用 Splinter 模块

Splinter 是一个基于 Selenium 的轻量级模块,适合快速实现简单的自动化操作。安装 Splinter 以及其依赖项后,可以通过以下代码实现浏览器操作:

from splinter import Browserbrowser = Browser()browser.visit("http://www.126.com")  # 打开 126 邮箱首页time.sleep(5)  # 等待页面加载完成# 模拟登录操作browser.find_by_id('idInput').fill('xxxxxx')  # 输入账号browser.find_by_id('pwdInput').fill('xxxxx')  # 输入密码browser.find_by_id('loginBtn').click()  # 点击登录按钮

二、Selenium 安装与使用

1. 安装依赖项

Selenium 需要依赖 Cython、lxml 和 Selenium。可以通过以下链接下载安装:

  • Cython: 下载链接
  • Lxml: 下载链接
  • Selenium: 下载链接
  • 2. 使用 WebDriver

    Selenium 提供了多种浏览器驱动,包括 Chrome、Firefox 和 IE。创建驱动实例并打开页面的代码示例:

    from selenium.webdriver import Chrome, Firefox, InternetExplorerdriver = Chrome()  # 创建 Chrome 浏览器实例driver.get("http://www.baidu.com")  # 打开百度首页

    3. 常用操作方法

    • driver.get(url):打开指定网页。
    • driver.find_element_by_id("id"):根据元素 ID 定位元素。
    • driver.find_element_by_name("name"):根据元素名称定位元素。
    • driver.find_element_by_class_name("class"):根据类名定位元素。
    • driver.find_element_by_tag_name("tag"):根据标签名称定位元素。
    • driver.find_element_by_link_text("text"):根据链接文本定位元素。
    • driver.find_element_by_xpath("xpath表达式"):根据 XPath 表达式定位元素。

    三、页面元素定位

    1. 常见定位方式

    • ID 定位find_element_by_id("id")
    • 名称定位find_element_by_name("name")
    • 类名定位find_element_by_class_name("class")
    • 标签名定位find_element_by_tag_name("tag")
    • 链接文本定位find_element_by_link_text("text")
    • XPath 定位find_element_by_xpath("//input[@id='kw']")
    • CSS 定位find_element_by_css_selector("#kw")

    2. 复杂情况处理

    如果元素定位困难,可以通过组合多个属性或 XPath 表达式来精准定位。例如:

    # 定位类名为 "s_ipt" 且 ID 为 "kw" 的输入框input_search = driver.find_element_by_css_selector(".s_ipt[id='kw']")

    四、常见案例

    1. 登录 126 邮箱

    以下是模拟登录 126 邮箱的示例代码:

    from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("http://www.126.com")time.sleep(3)# 定位并填写账号和密码username = driver.find_element_by_id('idInput')username.clear()username.send_keys('xxxxxx')password = driver.find_element_by_id('pwdInput')password.clear()password.send_keys('xxxxx')login_btn = driver.find_element_by_id('loginBtn')login_btn.click()time.sleep(8)# 退出登录driver.quit()

    2. 发送邮件

    以下是模拟发送邮件的示例代码:

    from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("http://www.126.com/mail")time.sleep(3)# 定位发件箱并点击email_component = driver.find_element_by_xpath("//span[contains(text(), '写 信')]")email_component.click()time.sleep(3)# 定位收件人地址栏并填写receiver = driver.find_element_by_class_name('nui-editableAddr-ipt')receiver.send_keys('xxx@163.com')# 定位主题输入栏并填写subject = driver.find_element_by_xpath("//input[@class='nui-ipt-input' and @maxlength='256']")subject.send_keys('自动化测试邮件')# 定位正文输入栏并填写body = driver.find_element_by_class_name('nui-scroll')body.send_keys('这是第一封自动化测试邮件')# 点击发送按钮send_btn = driver.find_element_by_class_name('nui-btn-text')send_btn.click()time.sleep(3)# 确认邮件发送成功assert '发送成功' in driver.page_sourcedriver.quit()

    五、常见问题与解决方案

    1. 动态 ID 定位不到元素

    如果元素 ID 是动态变化的,可以通过 XPath 或 CSS 定位。

    # 例如,动态 ID 的元素可以通过以下方式定位:input_element = driver.find_element_by_xpath("//input[@id='dynamic_id']")

    2. 元素不可见

    如果元素不可见,可以设置显性等待或检查元素是否可见。

    # 设置显性等待driver.implicitly_wait(10)# 检查元素是否可见if not element.is_displayed():    raise NoSuchElementException("元素未显示")

    3. 处理 iframe

    如果操作需要访问 iframe 内部的元素,需要先切换到 iframe。

    # 定位 iframe 并切换iframe = driver.find_element_by_class_name('APP-editor-iframe')driver.switch_to_frame(iframe)# 操作 iframe 内部的元素username = iframe.find_element_by_name('userName')username.send_keys('登录名')

    结论

    通过以上方法,可以轻松实现多种浏览器操作和页面元素控制。在实际使用中,根据具体需求选择合适的定位方式和浏览器驱动,确保测试脚本高效且可靠。

    转载地址:http://mfnb.baihongyu.com/

    你可能感兴趣的文章
    Nginx upstream性能优化
    查看>>
    Nginx 中解决跨域问题
    查看>>
    Nginx 动静分离与负载均衡的实现
    查看>>
    Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
    查看>>
    nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
    查看>>
    Nginx 反向代理解决跨域问题
    查看>>
    Nginx 反向代理配置去除前缀
    查看>>
    nginx 后端获取真实ip
    查看>>
    Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    Nginx 常用配置清单
    查看>>
    nginx 常用配置记录
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    Nginx 负载均衡与权重配置解析
    查看>>
    Nginx 负载均衡详解
    查看>>
    nginx 配置 单页面应用的解决方案
    查看>>
    nginx 配置https(一)—— 自签名证书
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>