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')

  1. # 写到这里,先运行一下,看看执行结果
    # 然后就是安装我们前面的一贯的思路,可以将
    # 每个城市的信息存放到一个列表中
    # 问大家怎么做?

cityWeathers = ele.text.split('℃\n')

#南京

#11℃/22

  1. # 这样: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

  1. # 最高最低气温位置会变,根据位置决定是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

  1. 请到如下网址下载Chrome浏览器 的 web driver 驱动

https://chromedriver.storage.googleapis.com/2.33/chromedriver_win32.zip

  1. pip 安装Selenium Web driver Python 客户端库
  1. 练习1
  2.  
  3. 1 访问如下网站,
  4. http://121866.com/cust/sign.html
  5.  
  6. 先注册一个账号, 记住用户名和密码。
  7.  
  8. 2 然后开发一个自动化程序, 使用 用户名密码 自动化登录该网站,
  9. 并通过检查登录后右上角显示的用户名判断,是否登录成功。
  10.  
  11. 练习2
  12.  
  13. 1. 访问天气查询网站(网址如下),查询江苏省天气
  14. http://www.weather.com.cn/html/province/jiangsu.shtml
  15.  
  16. 2. 获取江苏所有城市的天气,并找出其中每天最低气温最低的城市,显示出来,比如
  17. 温度最低为12℃, 城市有连云港 盐城

参考答案,往下翻

练习1

  1. from selenium import webdriver
  2. import time
  3.  
  4. driver = webdriver.Chrome(r"d:\tools\webdrivers\chromedriver.exe")
  5.  
  6. # ------------------------
  7. driver.get('http://121866.com/cust/sign.html')
  8.  
  9. driver.find_element_by_id("username").send_keys('xxxx')
  10. driver.find_element_by_id("password").send_keys('xxxx')
  11.  
  12. driver.find_element_by_id("btn_sign").click()
  13. time.sleep(2)
  14.  
  15. expectStr = driver.find_element_by_id("username").text
  16. if 'xxxx' == expectStr:
  17. print('测试通过')
  18. else:
  19. print('测试不通过')
  20.  
  21. # ------------------------
  22. input()
  23. driver.quit()

练习2

  1. from selenium import webdriver
  2. driver = webdriver.Chrome(r"d:\tools\webdrivers\chromedriver.exe")
  3.  
  4. # ------------------------
  5. driver.get('http://www.weather.com.cn/html/province/jiangsu.shtml')
  6.  
  7. ele = driver.find_element_by_id("forecastID")
  8. print(ele.text)
  9.  
  10. '''
  11. citysWeather是每个城市的温度信息 list
  12.  
  13. 每个元素像这样:
  14. 南京
  15. 12℃/27
  16. '''
  17. citysWeather = ele.text.split(u'℃\n')
  18.  
  19. # 算出温度最低城市
  20.  
  21. lowest = 100
  22. lowestCity = [] # 温度最低城市列表
  23. for one in citysWeather:
  24. one = one.replace(u'℃','')
  25. print(one)
  26. curcity = one.split('\n')[0]
  27. lowweather = one.split('/')[1]
  28. lowweather = int(lowweather)
  29. # 发现气温更低的城市
  30. if lowweather<lowest:
  31. lowest = lowweather
  32. lowestCity = [curcity]
  33. # 温度和当前最低相同,加入列表
  34. elif lowweather ==lowest:
  35. lowestCity.append(curcity)
  36.  
  37. print('温度最低为%s℃, 城市有%s' % (lowest, ' '.join(lowestCity)))
  38.  
  39. # ------------------------
  40.  
  41. driver.quit()
  1.  

选择、操作web元素的更多相关文章

  1. 选择、操作web元素-2

    11月3日 等待web元素的出现 例子:百度搜索松勤网,点击操作后不等待页面刷新,下面选择页面元素的时候,该元素还是未出现 sleep方案的弊病:固定的等待时间,导致测试用例执行时间很长 为什么cli ...

  2. Xpath选择、操作web元素

    11月6日 xpath选择 XPath(XML Path Language)是W3C(World Wide Web Consortium)定义的用来在XML文档中选择节点的语言, 主浏览器也支持XPa ...

  3. 选择、操作web元素-3

    11月5日 Selenium 作业 3 登录 51job , http://www.51job.com 输入搜索关键词 "python", 地区选择 "杭州"( ...

  4. Web自动化 - 选择操作元素 1

    文章转自 白月黑羽教Python 所有的 UI (用户界面)操作 的自动化,都需要选择界面元素. 选择界面元素就是:先让程序能找到你要操作的界面元素. 先找到元素,才能操作元素. 选择元素的方法 程序 ...

  5. Web自动化 - 选择操作元素 2

    文章转自 白月黑羽教Python 前面我们看到了根据 id.class属性.tag名 选择元素. 如果我们要选择的 元素 没有id.class 属性, 这时候我们通常可以通过 CSS selector ...

  6. 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

    在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...

  7. selenium怎么操作web页面常见的元素

    总结一下selenium怎么操作web页面常见的元素. 主要有: 上传 alter dialog prompt dialog confirm dialog select list radio box ...

  8. Appium之选择/操作元素

    Appium是如何选择.操作元素的呢? appium自动化  ------  选择界面 元素 操作元素  ------- ① 点击 ② 输入字符 ③ 拖拽 ④ 获取页面元素的各种属性 根据appium ...

  9. Selenium Web元素操作

    我们定位到Web页面元素之后,可以对元素进行一系列的操作,实现跟页面的交互.包括点击.文本输入.元素属性获取等.常用的方法列举如下: 方法 描述 click() 点击元素 send_keys(**va ...

随机推荐

  1. 2、以自定义struct或struct指针作为map的Key

    若干问题: struct Node { int k, b; friend bool operator <(Node a, Node b) { return a.k < b.k; } }no ...

  2. Ubuntu 14.10 下安装伪分布式hbase 0.99.0

    HBase 安装分为:单击模式,伪分布式,完全分布式,在单机模式中,HBase使用本地文件系统而不是HDFS ,所有的服务和zooKeeper都运作在一个JVM中.本文是安装的伪分布式. 安装步骤如下 ...

  3. python "爬虫+有道词典"实现一个简单翻译程序

    抓包软件使用的是Fiddler4 新版的查询接口 比较负责,引入了salt和sign http://fanyi.youdao.com/translate?smartresult=dict&sm ...

  4. ES6基础一

    声明方式 var和let的区别 1,var用来声明全局变量,let用来声明局部变量:               2,var可以提升变量,let声明的变量不在变量提升:        const声明常 ...

  5. vue之v-bind

    接触Vue已经有很长一段时间了,后来因为工作的原因,已经有差不多一年的时间没有碰过它了,害怕时间久,自己就完全忘记了,所以还是想抽出一点时间将以前的知识整理一下. 刚接触vue的时候,觉着最神奇的地方 ...

  6. JS的正则表达式简介

    1.JS的正则表达式 1.1 简介 JS的正则表达式比较简单,总体上只分为两个功能:一个是test——用于匹配字符串是否符合规定的正则表达式规则:另外一个是exec——用于获取匹配到的数据. 1.2 ...

  7. 对象生命周期中至少被GC一次后存活

    Finalize调用流程:GC时,当对象变成(GC Roots)不可达时,若该对象覆盖(重写)了finalize方法并且未执行过finalze方法,则将其放入F-Queue队列,由一低优先级线程执行该 ...

  8. 让android程序根据重力感应旋转屏幕(支持4个方向旋转)

    原文地址:http://blog.csdn.net/yixiaoqingyuz/article/details/6453798代码如下: ChangeOrientationHandler.java p ...

  9. 在VMware安装Centos7

    1.新建虚拟机==>典型==>稍后安装操作系统==>选择linux==>centos 64位 2.填写虚拟机名字以及安装位置. 3.磁盘容量采用默认即可. 4. 自定义硬件: ...

  10. 01-配置java开发环境

    JDK 1.8软件下载地址 (Oracle公司的官方网站) http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads ...