• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

关闭

返回栏目

关闭

返回python栏目

97 - 第三方库 - selenium - Web自动化测试工具

作者:

贺及楼

成为作者

更新日期:2024-10-28 10:09:56

selenium

作用:web自动化测试工具

selenium库的简介

Python 的 selenium 库是一个自动化测试工具,用于模拟用户在浏览器中的操作。它可以控制浏览器加载网页、点击按钮、填写表单、执行JavaScript代码等。selenium 支持多种浏览器,包括Chrome、Firefox、Internet Explorer等,并且能够处理Ajax、弹出窗口等动态内容。它广泛应用于网页测试、爬虫和自动化网页交互,是自动化Web应用程序测试和爬取动态网页数据的强大工具。

安装浏览器操作库 selenium 命令

  1. pip install selenium

pip安装selenium
处理安装了selenium,还安装了 attrs-24.2.0 certifi-2024.8.30 exceptiongroup-1.2.2 h11-0.14.0 idna-3.10 outcome-1.3.0.post0 pysocks-1.7.1 selenium-4.25.0 sniffio-1.3.1 sortedcontainers-2.4.0 trio-0.26.2 trio-websocket-0.11.1 typing_extensions-4.12.2 urllib3-2.2.3 websocket-client-1.8.0 wsproto-1.2.0

包中文名 释义 跳转
attrs-24.2.0 / attrs是一个Python库,用于创建具有自动属性验证、文档生成和初始化的类。 /
certifi-2024.8.30 证书库 certifi是一个Python库,提供Mozilla的CA证书Bundle,用于HTTPS请求的SSL证书验证 /
exceptiongroup-1.2.2 / ExceptionGroup是Python 3.11引入的,用于将多个异常组合成一个异常对象。 /
h11-0.14.0 / h11是Python的HTTP/1.1协议的实现库,用于构建HTTP服务器和客户端。 /
idna-3.10 / idna是一个Python库,用于支持国际化域名(IDNA)协议,将域名从Unicode转换为ASCII兼容编码(ACE)。 /
outcome-1.3.0.post0 / outcome 是一个 Python 库,用于捕获 Python 函数调用的结果 /
pysocks-1.7.1 请求库 PySocks是一个Python库,用于通过SOCKS代理发送网络流量,支持SOCKS4、SOCKS5和HTTP代理协议。 /
selenium-4.25.0 / Selenium是一个用于Web应用程序自动化测试的工具 /
sniffio-1.3.1 异步监控库 sniffio是一个Python库,用于检测当前代码运行的异步环境,支持包括asyncio、trio等在内的多种异步框架。 /
sortedcontainers-2.4.0 排序库 SortedContainers 是一个Python库,提供自动排序的列表、字典、集合等数据结构。 /
trio-0.26.2 异步库 Trio是一个Python库,用于编写异步并发代码。强调正确性和可预测性,避免了常见的异步编程陷阱。 /
trio-websocket-0.11.1 / Trio-websocket 是一个用于 Trio 异步框架的 WebSocket 客户端和服务器实现库 /
typing_extensions-4.12.2 / typing_extensions是Python的类型提示扩展库,支持在旧版Python上使用新类型系统特性,允许实验性特性的探索 /
urllib3-2.2.3 / urllib3是一个强大的、用户友好的Python HTTP客户端库 urllib3 http请求库
websocket-client-1.8.0 / websocket-client是一个Python库,用于建立和维护与WebSocket服务器的连接。 /
wsproto-1.2.0 WebSocket通信库 wsproto是一个纯Python实现的WebSocket协议栈,旨在提供灵活的WebSocket通信支持。 /

支持的浏览器

  1. android (package)
  2. blackberry (package)
  3. chrome (package)
  4. common (package)
  5. edge (package)
  6. firefox (package)
  7. ie (package)
  8. opera (package)
  9. phantomjs (package)
  10. remote (package)
  11. safari (package)
  12. support (package)
  13. webkitgtk (package)

PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试
但是已经不更新了

安装浏览器 - 司机

  1. 谷歌驱动(chromedriver)下载地址:
  2. https://chromedriver.com/
  3. http://chromedriver.storage.googleapis.com/index.html
  4. 火狐驱动下载路径(GeckoDriver):
  5. https://github.com/mozilla/geckodriver/releases

声明并调用浏览器Chrome、Firefox

  1. from selenium import webdriver
  2. browser = webdriver.Chrome()
  3. browser = webdriver.Firefox()
  4. driver = webdriver.Chrome(executable_path="/path/to/chromedriver")

参数添加

  1. from selenium.webdriver.chrome.options import Options
  2. chrome_options = Options()
  3. chrome_options.add_argument("--headless") # 确保在无界面模式下运行
  4. driver = webdriver.Chrome(options=chrome_options)

获得远程访问页面browser.get(XXX)

  1. from selenium import webdriver # 导入库
  2. browser = webdriver.Chrome() # 声明浏览器
  3. url = 'https:www.baidu.com'
  4. browser.get(url) # 打开浏览器预设网址
  5. print(browser.page_source) # 打印网页源代码
  6. browser.close() # 关闭当前浏览器窗口
  7. browser.quit() # 关闭浏览器进程

获得本地访问页面browser.get(XXX)

  1. import os
  2. from selenium import webdriver # 导入库
  3. browser = webdriver.Chrome() # 声明浏览器
  4. path = os.getcwd()
  5. url = 'file://'+path + "/aa.html"
  6. # file://C:\Users\xxx\Desktop\tt/aa.html
  7. browser.get(url) # 打开浏览器预设网址
  8. print(browser.page_source) # 打印网页源代码
  9. browser.close() # 关闭当前浏览器窗口
  10. browser.quit() # 关闭浏览器进程

显式等待(driver、timeout、poll_frequency、ignored_exceptions)直到出现啥啥

  1. from selenium.webdriver.support import expected_conditions as EC
  2. WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID,"xx"),message=""))

driver:webdriver的驱动;
timeout:最长超时时间,默认以秒为单位;
poll_frequency:休眠时间(步长)的间隔,检测间隔时间,默认0.5s;
ignored_exceptions: 超时后的异常信息,默认情况下抛 “NoSuchElementException”异常;

超过设置时间,抛出TimeoutException异常

查找元素-方式一 browser.find_element_by_XX(‘a’)

  1. browser.find_element_by_name('a')
  2. browser.find_element_by_id('a')
  3. browser.find_element_by_xpath('a') # (可以直接copy)
  4. browser.find_element_by_link_text('a')
  5. browser.find_element_by_partial_link_text('a')
  6. browser.find_element_by_tag_name('a')
  7. browser.find_element_by_class_name('a')
  8. browser.find_element_by_css_selector('a')

查找元素-方式二 browser.find_element(By.ID, ‘a’)

  1. from selenium.webdriver.common.by import By # 导入
  2. browser.find_element(By.ID, 'a')

查找多个元素S-方式一 browser.find_elements_by_XX(‘a’)

  1. # 对比上面element多个s
  2. browser.find_elements_by_name('a')
  3. browser.find_elements_by_id('a')
  4. browser.find_elements_by_xpath('a') # (可以直接copy)
  5. browser.find_elements_by_link_text('a')
  6. browser.find_elements_by_partial_link_text('a')
  7. browser.find_elements_by_tag_name('a')
  8. browser.find_elements_by_class_name('a')
  9. browser.find_elements_by_css_selector('a')

查找多个元素S-方式二 browser.find_elements(By.CSS_SELECTOR,’.service’)

  1. from selenium.webdriver.common.by import By # 导入
  2. browser.find_elements(By.CSS_SELECTOR,'.service')

操作

  1. Iuput.send_keys() # 找到Iuput元素后
  2. Iuput.clear() # 找到Iuput元素后清除
  3. button.click() # 找到button元素后点击
  4. print(a.text) # 找到a元素后获取文本值

5悬停

  1. # 2.定位到要悬停的元素
  2. element= driver.find_element_by_xpath("//div[@data-hover-cls='dp-hover icon-btn-arrow-2-h-parent']")
  3. # 3.对定位到的元素执行鼠标悬停操作
  4. ActionChains(driver).move_to_element(element).perform()