选择、操作web元素
11月1日
什么是web元素
Selenium自动化主要就是:选择界面元素,操作界面元素(输入操作:点击、输入文字、拖拽等,输出操作:获取元素的各种属性),根据界面上获取的数据进行分析和处理
选择元素
webdriver:操作整个浏览器和当前整个页面
当前页面上的选择符合查找条件的对象
打开网页,回退,前进,刷新网页
获取、改变浏览器窗口的大小,关闭浏览器,截屏
获取、设置cookies
WebElement:操作和对应web元素
当前web元素的所有子元素里面符合查找条件的对象
操作该web元素,比如:点击元素,输入字符,获取元素坐标、尺寸、文本内容、其它的属性信息
通过id选择元素
一个web元素
id是在DOM中唯一标志这个元素的属性:查找的效率最高
写法1:element = driver.find_element_by_id("kw")
写法2:
from selenium.webdirver.common.by import By
element = driver.find_element(by = By.ID,value = "kw")
没有找到
selenium.common.exception.NoSuchElementException
获取元素信息
text属性 显示该元素在web页面显示出来的文本内容
get_attribute 方法
某个属性的值 :ele.get_attribute('href')
该元素对应html源代码 :ele.get_attribute('outerHTML')
该元素的内部部分的html代码:ele.get_attribute('innerHTML')
BeautifulSpup4 官方文档https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
BS 是可以从HTML或XML文件中提取数据的库,Selenium 可以用来远程获取数据,有的时候感觉用selenium获取某些元素数据不太方便,可以将其父节点的html获取回来,利用BS在本地做分析
我们可以将它和Selenium 两种技术融合使用,达到我们的目的
安装
pip install beautifulsoup4 -i https://pypi.douban.com/simple/
pip install html5lib
soup =BeautifulSoup(html_doc, "html5lib")
print (soup.find('title')) <=> print (soup.title) 查找结尾为标签名为title的第一个元素
print (soup.find('title').name) <=> print (soup.title.name) 获取标签名
print (soup.find('title').string) <=> print (soup.find('title').get_text()) 获取标签名为title的文本
获取元素在尖括号里 获取元素有子节点
print (soup.find_all('a')) 标签为a的所有元素的列表
通过name选择元素
一个web元素
<input name = "cheese" type = "text"/>
返回的是第一个找到的元素
cheese = driver.find_element_by_name("cheese")
或者
from selenium.webdirver.common.by import By
cheese = driver.find_element(By.NAME,"cheese")
返回所有元素
cheese = driver.find_elements_by_name("cheese")
或者
form selenium.webdriver.common.by import By
cheese = driver.find_elements(BY.NAME, "cheese")
如果找不到,返回空列表,不抛出异常
else = driver.find_elements_by_name('button3')
if eles:
print('存在‘)
else:
print(‘不存在’)
通过class选择元素,class比较多,通常查找的是列表
一个web元素
<div class= "cheese"><span>Cheddar</span></div>
<div class= "cheese"><span>Gouda</span></div>
返回所有元素
cheese = driver.find_elements_by_class_name("cheese")
或者
form selenium.webdirver.common.by import By
cheese = driver.find_elements(By.CLASS_NAME, "cheese")
通过tag名选择元素
tag名如果唯一的,可以通过tag名定位
假设html中有如下片段
<iframe src="..."></iframe>
可以
frame = driver.find_element_by_tag_name("iframe")
或者
from selenium.webdriver.common.by import By
frame = dirver.find_element(By.TAG_NAME,"iframe")
通过链接文本选择元素
对于链接,可以通过其链接文本的内容
<a href = "http://www.baidu.com">转到百度</a>
可以这样选择
ele = driver.find_element_by_link_text(u"转到百度"),python3 中不用加u
或者
from selenium.webdirver.common.by import By
ele = dirver.find_element(By.LINK_TEXT,u"转到百度“)
我们甚至只需要通过部分文本去找到该链接元素
ele = driver.find_element_by_partial_link_text(u"百度")
多钟技术实现目的
方法一
from selenium import webdriver
driver = webdriver.Chrome(r‘’)
driver.get('http://www.weather.com.cn/html/province/jiangsu.shtml')
ele = driver.find_element_by_id('forecastID')
# 写到这里,先运行一下,看看执行结果
# 然后就是安装我们前面的一贯的思路,可以将
# 每个城市的信息存放到一个列表中
# 问大家怎么做?
cityWeathers = ele.text.split('℃\n')
#南京
#11℃/22
# 这样:citysWeather是每个城市的温度信息 list
#
# 每个元素像这样: # 南京 # 12℃/27
#下面就是算法,算出温度最低城市,
# 有很多方法,大家看看这种
# 我们循环 去遍历这个城市文档信息列表,
# 得到城市名和 低气温的值,
#
# 依次和取出当前的所有城市最低气温比较,
# 如果更低,就记录到当前的低温城市列表中。
lowest = None # 记录目前最低温,先设置为None
lowestCities = [] # 温度最低城市列表
for one in cityWeahters:
one = one.replace('℃','')
cityname = one.split('\n')[0]
lowTemp = int(one.split('\n')[1].split('/')[0])
if lowest == None:
lowest = lowTemp
lowestCities.append()
else lowTemp < lowest:
lowest = lowTemp
lowestCities = [cityname]
elif lowTemp == lowest:
lowestCities.append(cityname)
print(f"最低温度为{lowest},城市有{','.join(lowestCities)}")
driver.quit()
*************************************
from selenium import webdriver
driver = webdriver.Chrome(r‘’)
driver.get('http://www.weather.com.cn/html/province/jiangsu.shtml')
ele = driver.find_element_by_id('forecastID')
dls = ele.find_elements_by_tag_name('dl')
citys = []
for dl in dls:
name = dl.find_element_by_tag_name('dt')
ltemp = dl.find_element_by_tag_name('span').text
# 最高最低气温位置会变,根据位置决定是span还是b
ltemp = int(ltemp.replace('℃','')
citys.append([name,ltemp)
lowest = None
lowestCities = []
for one in citys:
urcity = one[0]
ltemp = one[1]
curlowweather = ltemp
if lowest == None or ltemp < lowest:
lowest = ltemp
lowestcitys = [curcity]
elif ltemp == lowest:
lowestCitys.append(curcity)
print(f"最低温度为{lowest},城市有{','.join(lowestCities)}")
driver.quit()
************************************************
from selenium import webdriver
driver = webdriver.Chrome(r‘’)
driver.get('http://www.weather.com.cn/html/province/jiangsu.shtml')
ele = driver.find_element_by_id('forecastID')
html_doc = ele.get_attribute('innerHTML')
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, "html5lib")
dls = soup.find_all('d1')
citys = []
for dl in dls;
name =dl.dt.a.string
ltemp = dl.dd.span.string
ltemp = int(ltemp.replace('℃',''))
print(name, ltemp)
citys.append([name,ltemp])
lowest = None
lowestCities = []
for one in citys:
curcity = one[0]
ltemp = one[1]
curlowweather = ltemp
if lowest == None or ltemp < lowest:
lowest = ltemp
lowestcitys = [curcity]
elif ltemp == lowest:
lowestCitys.append(curcity)
print(f"最低温度为{lowest},城市有{','.join(lowestCities)}")
driver.quit()
Selenium 作业 1
- 请到如下网址下载Chrome浏览器 的 web driver 驱动
https://chromedriver.storage.googleapis.com/2.33/chromedriver_win32.zip
- pip 安装Selenium Web driver Python 客户端库
练习1 1 访问如下网站,
http://121866.com/cust/sign.html 先注册一个账号, 记住用户名和密码。 2 然后开发一个自动化程序, 使用 用户名密码 自动化登录该网站,
并通过检查登录后右上角显示的用户名判断,是否登录成功。 练习2 1. 访问天气查询网站(网址如下),查询江苏省天气
http://www.weather.com.cn/html/province/jiangsu.shtml 2. 获取江苏所有城市的天气,并找出其中每天最低气温最低的城市,显示出来,比如
温度最低为12℃, 城市有连云港 盐城
参考答案,往下翻
练习1
from selenium import webdriver
import time driver = webdriver.Chrome(r"d:\tools\webdrivers\chromedriver.exe") # ------------------------
driver.get('http://121866.com/cust/sign.html') driver.find_element_by_id("username").send_keys('xxxx')
driver.find_element_by_id("password").send_keys('xxxx') driver.find_element_by_id("btn_sign").click()
time.sleep(2) expectStr = driver.find_element_by_id("username").text
if 'xxxx' == expectStr:
print('测试通过')
else:
print('测试不通过') # ------------------------
input()
driver.quit()
练习2
from selenium import webdriver
driver = webdriver.Chrome(r"d:\tools\webdrivers\chromedriver.exe") # ------------------------
driver.get('http://www.weather.com.cn/html/province/jiangsu.shtml') ele = driver.find_element_by_id("forecastID")
print(ele.text) '''
citysWeather是每个城市的温度信息 list 每个元素像这样:
南京
12℃/27
'''
citysWeather = ele.text.split(u'℃\n') # 算出温度最低城市 lowest = 100
lowestCity = [] # 温度最低城市列表
for one in citysWeather:
one = one.replace(u'℃','')
print(one)
curcity = one.split('\n')[0]
lowweather = one.split('/')[1]
lowweather = int(lowweather)
# 发现气温更低的城市
if lowweather<lowest:
lowest = lowweather
lowestCity = [curcity]
# 温度和当前最低相同,加入列表
elif lowweather ==lowest:
lowestCity.append(curcity) print('温度最低为%s℃, 城市有%s' % (lowest, ' '.join(lowestCity))) # ------------------------ driver.quit()
选择、操作web元素的更多相关文章
- 选择、操作web元素-2
11月3日 等待web元素的出现 例子:百度搜索松勤网,点击操作后不等待页面刷新,下面选择页面元素的时候,该元素还是未出现 sleep方案的弊病:固定的等待时间,导致测试用例执行时间很长 为什么cli ...
- Xpath选择、操作web元素
11月6日 xpath选择 XPath(XML Path Language)是W3C(World Wide Web Consortium)定义的用来在XML文档中选择节点的语言, 主浏览器也支持XPa ...
- 选择、操作web元素-3
11月5日 Selenium 作业 3 登录 51job , http://www.51job.com 输入搜索关键词 "python", 地区选择 "杭州"( ...
- Web自动化 - 选择操作元素 1
文章转自 白月黑羽教Python 所有的 UI (用户界面)操作 的自动化,都需要选择界面元素. 选择界面元素就是:先让程序能找到你要操作的界面元素. 先找到元素,才能操作元素. 选择元素的方法 程序 ...
- Web自动化 - 选择操作元素 2
文章转自 白月黑羽教Python 前面我们看到了根据 id.class属性.tag名 选择元素. 如果我们要选择的 元素 没有id.class 属性, 这时候我们通常可以通过 CSS selector ...
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...
- selenium怎么操作web页面常见的元素
总结一下selenium怎么操作web页面常见的元素. 主要有: 上传 alter dialog prompt dialog confirm dialog select list radio box ...
- Appium之选择/操作元素
Appium是如何选择.操作元素的呢? appium自动化 ------ 选择界面 元素 操作元素 ------- ① 点击 ② 输入字符 ③ 拖拽 ④ 获取页面元素的各种属性 根据appium ...
- Selenium Web元素操作
我们定位到Web页面元素之后,可以对元素进行一系列的操作,实现跟页面的交互.包括点击.文本输入.元素属性获取等.常用的方法列举如下: 方法 描述 click() 点击元素 send_keys(**va ...
随机推荐
- TCP/IP学习20180625-DNS
1 DNS:domain name system域名系統把域名,轉換成IP2 最開始是一個hosts.txt,後來是數據庫,最後是分佈式數據庫3 每個名字服務器存儲一部分名字.如果有不知道的名字,就轉 ...
- 使用jquery.mCustomScrollbar自定义滚动条(4)live使用,向未来元素添加滚动条,不实用,了解一下
.div_box元素是本来没有的,在滚动条初始化的时候方法是加在$('.content .div_box').mCustomScrollbar()上面,参数live:on; 点击按钮的时候,进行con ...
- jquery插件的几种写法
/** * Created by peng on 2016/12/8. */jQuery.extend({ min: function(a, b) { return a < b ? a : b; ...
- [UE4]使用另一个相机Scene Capture Component 2D当小地图
挂一个相机(Scene Capture Component 2D)在人物角色的正上方,相机朝下,让UI上的某一块区域看到相机所显示的内容. 一.在人物角色正上方添加相机组件Scene Capture ...
- SAS ODS GRAPHICS SGPLOT 画图 指存放定路径、名称、指定格式
OPTION NOCENTER LS=MAX PS=MAX NODATE; LIBNAME S 'E:\00@Data'; PROC FREQ DATA=S.DATA00; TABLES CLE_DA ...
- CentOS之文档的压缩与打包
.rar压缩文件linux中不识别,.zip在windows和Linux中动能使用. .gz:由gzip压缩工具压缩的文件 .bz2:bzip2压缩工具压缩的文件 .tar:由tar打包程序打包的文件 ...
- C# 线程 在 sleep,suspend 之后 Abort 的方法
1) 线程在sleep时的Abort 方法:对线程函数用 catch ThreadAbortException ,并return. 示例: [csharp] view plaincopy ...
- (转)Intellij IDEA 快捷键整理
[常规] Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关 ...
- c helloworld
#include <stdio.h> int main() { int i; printf("%s","hello, world"); } 1.#i ...
- 大数据Web可视化分析系统开发
下载地址 https://tomcat.apache.org/download-70.cgi 打开我们的idea 这些的话都可以按照自己的需求来修改 在这里新建包 新建一个java类 package ...