python + selenium 技术

发布于 2024-03-18 21:44:37 字数 5908 浏览 21 评论 0

这两天软件的一位同学,让我用 python 给他写一个挂机脚本。具体需求是:登录设备管理页面,进入指定页面,等待页面超时,再进行点击页面操作;之前这一块技术,自己学习过。但是坑爹的是,很长一段时间没使用,对于定位标签,竟然还需要去查找资料。此篇文章主要记录 selenium 相关技术,包括关于如何定位页面标签。省去以后查找资料的时间。

什么是 selenium?

selenium 是一个免费、开源、跨平台的自动化测试工具。selenium 主要分为 selenium1.0 和 selenium2.0,当然还有 selenium3.0。

其中 Selenium 1.0 = Selenium IDE + Selenium Grid + Selenium RC。Selenium RC(Remote Control)是 Selenium 家族的核心部分。Selenium RC 支持多种不同语言编写的自动化测试脚本,通过 Selenium RC 的服务器作为代理服务器去访问应用,从而达到测试的目的。Selenium RC 分为 Client Libraries 和 Selenium Server。Client Libraries 库主要用于编写测试脚本,用来控制 Selenium Server 的库。Selenium Server 负责控制浏览器行为。

webdriver 与 selenium 本身并不属于同一个项目,但后面两者的合并也促使 selenium2.0 的诞生。所以 selenium2.0=selenium1.0+webdriver。webdriver 可以看作是 selenium RC 的替代品。

Python(webdriver)=>Chromedriver=>Chrome

安装软件环境

安装 python3,进入 python 官网 ,选择 python3 进行下载。注意:windows 平台安装 python 时 d,需将添加到环境变量的选项勾选。

安装 selenium 包,cmd 或者终端中输入如下命令

pip install selenium

下载 webdriver,点击进入 淘宝 npm 。有人会问,为什么不用 npm?因为墙的缘故。点击 ChromeDriver 镜像选项,下载 Chromedriver。注意 chromedriver.exe 需要与 chrome 浏览器版本匹配。下载得到压缩包后,将解压得到的 Chromedriver.exe 放到 python 的环境变量路径下。

Mac 平台下环境变量设置

使用如下命令查看 MAC 的环境变量

echo $PATH

通过命令将 Chromedriver 复制至/usr/local/bin 目录下即可

cp /Users/fanhao/Downloads/chromedriver /usr/local/bin

Windows 平台下环境变量设置

如果之前安装 python3 时,已经勾选了添加到 path 中,则将下载得到 Chromedriver.exe 放到 python3 的路径下。

实例

from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("http://192.168.1.1")
n=199
while n>0:
n=n-1
print(n)
driver.find_element_by_xpath("//input[@id='login-username']").send_keys("admin")
driver.find_element_by_xpath("//input[@id='login-password']").send_keys("password")
driver.find_element_by_xpath("//input[@id='submit']").click()
driver.find_element_by_xpath("//a[@href='./main.html#info']").click()
driver.switch_to_frame("menufrm")
driver.find_element_by_xpath("//a[@href='dslatm.cmd']").click()
time.sleep(300)
#driver.switch_to_frame("menufrm")
driver.find_element_by_xpath("//a[@href='wancfg.cmd']").click()
driver.refresh()

定位元素的方法

绝对定位

此方法最为简单,具体格式为

driver.find_element_by_xpath("绝对路径")

具体例子:

#x 代表第 x 个 div 标签,注意,索引从 1 开始而不是 0
driver.find_element_by_xpath("/html/body/div[x]/form/input")

此方法缺点显而易见,当页面元素位置发生改变时,都需要修改,因此,并不推荐使用

相对定位

相对路径,以‘//’开头,具体格式为

driver.find_element_by_xpath("//标签")

具体例子:

#定位第 x 个 input 标签,[x]可以省略,默认为第一个
driver.find_element_by_xpath("//input[x]")

相对路径的长度和开始位置并不受限制,也可以采取以下方法

#[x]依然是可以省略的
driver.find_element_by_xpath("//div[x]/form[x]/input[x]")

标签加属性定位

相对比较简单,也要求属性能够定位到唯一一个元素,如果存在多个相同条件的标签,默认只是第一个,具体格式如下

driver.find_element_by_xpath("//标签[@属性==‘属性值’]")
driver.find_element_by_xpath("//input[@type='name' and @name='kw1']")

xpath:模糊匹配

以定位百度页面的超链接“hao123”为例

driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
#xpath 模糊匹配
driver.find_element_by_xpath("//*[contains(text(),'hao123')]").click()
#匹配含有 kw 属性值
driver.find_element_by_xpath("//*[contains(@id,'kw')]").send_keys("xpath")
#匹配 id 值为 kw 开头的属性
driver.find_element_by_xpath("//*[starts-with(@id,'kw')]").send_keys("test")

附录

python 相关

#coding=utf8
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://192.168.100.23/test.html")
#textfield
driver.find_element_by_xpath("//input[@data-name]").send_keys('test')
#radio
driver.find_element_by_xpath("//radio[@data-male]").click()
time.sleep(1)
driver.find_element_by_xpath("//radio[@data-female]").click()
#checkbox
driver.find_element_by_xpath("//checkbox[@data-bike]").click()
driver.find_element_by_xpath("//checkbox[@data-car]").click()
#select
driver.find_element_by_xpath("//select[@data-select]").click()
#texarea
driver.find_element_by_xpath("//textarea[@data-textarea]").send_keys('Te')
#a tag
driver.find_element_by_xpath("//a[@data-href]").click()
#div
driver.find_element_by_xpath("//input[@data-divinput]").send_keys('test')
#submit
driver.find_element_by_xpath("//input[@data-submit]").click()

ruby 相关

#以下为 ruby-2.0.0p195 +  watir-webdriver-0.9.9 + selenium
require 'watir-webdriver'
b=Watir::Browser.start("192.168.100.23/test.html",:chrome)
b.text_field(:xpath=>'//input[@data-name]').send_keys('test') #配置值
#b.text_field(:xpath=>'//input[@data-name]').value #获取值
#radio
b.radio(:xpath=>'//input[@data-female]').click()
b.input(:xpath=>'//input[@data-female]').click()
#checkbox
#checkbox
b.checkbox(:xpath=>'//input[@data-bike]').set() #选中
#b.checkbox(:xpath=>'//input[@data-bike]').clear() #取消选中
#选取 value 值
b.select(:xpath=>'//select[@data-select]').select_value('saab')
#选择 Text
b.select(:xpath=>'//select[@data-select]').select('Audi')
#b.select(:xpath=>'//select[@data-select]').value #获取选中的 value
#textarea
b.textarea(:xpath=>'//textarea[@data-textarea]').send_keys('TTTTT')
#a 标签
b.a(:xpath=>'//a[@data-href]').click()
#按钮
b.button(:xpath=>'//input[@data-submit]').click()
b.input(:xpath=>'//input[@data-submit]').click()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

世俗缘

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文