Python,web页面元素定位


目录

  • 2.1 操作元素基本方法
  • 2.2 常用8种元素定位(Firebug和firepath)
  • 2.3 xpath定位
  • 2.4 CSS定位
  • 2.5 SeleniumBuilder辅助定位元素
  • 2.6 操作元素(键盘和鼠标事件)
  • 2.7 多窗口、句柄(handle)
  • 2.8 定位一组元素elements
  • 2.9 iframe
  • 2.10 select下拉框
  • 2.11 alert\confirm\prompt
  • 2.12 单选框和复选框(radiobox、checkbox)
  • 2.13 table表格定位
  • 2.14 加载Firefox配置(略,已在2.1.8讲过,请查阅2.1.8节课)
  • 2.14-1 加载Chrome配置
  • 2.15 富文本(richtext)
  • 2.16-1 非input文件上传(SendKeys)
  • 2.16 文件上传(send_keys)
  • 2.17 获取元素属性
  • 2.18 爬页面源码(page_source)
  • 2.19 cookie相关操作
  • 2.20 绕过验证码(add_cookie)
  • 2.21 JS处理滚动条
  • 2.22 JS处理富文本
  • 2.23 js处理日历控件(修改readonly属性)
  • 2.24 js处理内嵌div滚动条
  • 2.25 js处理多窗口
  • 2.26 js解决click失效问题
  • 2.27 18种定位方法总结
  • 2.28 查看webdriver API(带翻译)
  • 2.29 练习题1:去掉页面动态窗
  • 2.30 练习题2:定位百度-更多产品
  • 2.31 练习题3:获取百度联系词
  • 2.32 js几种定位方法总结
  • 2.33 定位的坑:class属性有空格
  • 2.34 jquery定位(简直逆天)

正文

回到顶部回到顶部

2.从元素属性可以分析出,有个href = "http://www.hao123.com

说明它是个超链接,对于这种元素,可以用以下方法:

 2.2.8 find_element_by_partial_link_text()

1.有时候一个超链接它的字符串可能比较长,如果输入全称的话,会显示很长,这时候可以用一模糊匹配方式,截取其中一部分字符串就可以了

2.如“hao123”,只需输入“ao123”也可以定位到

2.2.9 find_element_by_xpath()

1.以上定位方式都是通过元素的某个属性来定位的,如果一个元素它既没有id、name、class属性也不是超链接,这么办呢?或者说它的属性很多重复的。这个时候就可以用xpath解决。
2.xpath是一种路径语言,跟上面的定位原理不太一样,首先第一步要先学会用工具查看一个元素的xpath。

 3.按照上图的步骤,在FirePath插件里copy对应的xpath地址。

 2.2.10 find_element_by_css_selector()

1.css是另外一种语法,比xpath更为简洁,但是不太好理解。这里先学会如何用工具查看,后续的教程再深入讲解
2.打开FirePath插件选择css
3.定位到后如下图红色区域显示

总结:
selenium的webdriver提供了18种(注意是18种,不是8种)的元素定位方法,前面8种是通过元素的属性来直接定位的,后面的xpath和css定位更加灵活,需要重点掌握其中一个。
前八种是大家都熟悉的,经常会用到的:

1.id定位:find_element_by_id(self, id_)
2.name定位:find_element_by_name(self, name)
3.class定位:find_element_by_class_name(self, name)
4.tag定位:find_element_by_tag_name(self, name)
5.link定位:find_element_by_link_text(self, link_text)
6.partial_link定位find_element_by_partial_link_text(self, link_text)
7.xpath定位:find_element_by_xpath(self, xpath)
8.css定位:find_element_by_css_selector(self, css_selector)

这八种是复数形式(2.8和2.27章节有介绍)

9.id复数定位find_elements_by_id(self, id_)
10.name复数定位find_elements_by_name(self, name)
11.class复数定位find_elements_by_class_name(self, name)
12.tag复数定位find_elements_by_tag_name(self, name)
13.link复数定位find_elements_by_link_text(self, text)
14.partial_link复数定位find_elements_by_partial_link_text(self, link_text)
15.xpath复数定位find_elements_by_xpath(self, xpath)
16.css复数定位find_elements_by_css_selector(self, css_selector

这两种是参数化的方法,会在以后搭建框架的时候,会经常用到PO模式,才会用到这个参数化的方法(将会在4.2有具体介绍)

17.find_element(self, by='id', value=None)
18.find_elements(self, by='id', value=None)
回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部

3.通过driver.text获取到文本

三、获取元素的标签
1.获取百度输入框的标签属性

四、获取元素的其它属性
1.获取其它属性方法:get_attribute("属性"),这里的参数可以是class、name等任意属性
2.如获取百度输入框的class属性

五、获取输入框内的文本值
1、如果在百度输入框输入了内容,这里输入框的内容也是可以获取到的

六、获取浏览器名称
1.获取浏览器名称很简单,用driver.name就能获取到

# 获取浏览器名称
driver.name
七、参考代码

# coding:utf-8
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
time.sleep(2)
title = driver.title print title text = driver.find_element_by_id("setf").text print text # 获取元素的标签 tag = driver.find_element_by_id("kw").tag_name print tag # 获取元素的其它属性 name = driver.find_element_by_id("kw").get_attribute("class") print name # 获取输入框的内容 driver.find_element_by_id("kw").send_keys("yoyoketang") value = driver.find_element_by_id("kw").get_attribute("value") print value # 获取浏览器名称 print driver.name
回到顶部 回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部回到顶部http://sh.xsjedu.org): 

大家能看到,图中的这种弹窗就是现在主流的表现形式,处理这种弹窗可以利用HTML DOM Style 对象,有一个display属性,可以设置元素如何被显示,
详细解释可以参考http://www.w3school.com.cn/jsref/prop_style_display.asp。将display的值设置成none就可以去除这个弹窗了:
js = 'document.getElementById("doyoo_monitor").style.display="none";'

完整代码如下:

# encoding:utf-8
from selenium import webdriver
import time 
driver = webdriver.Firefox() 
driver.get("http://sh.xsjedu.org/")
time.sleep(1)
js='document.getElementById("doyoo_monitor").style.display="none";'
driver.execute_script(js)

是不是既简单又高效?

回到顶部回到顶部回到顶部回到顶部回到顶部

2.34 jquery定位(简直逆天)

前言
元素定位可以说是学自动化的小伙伴遇到的一道门槛,学会了定位也就打通了任督二脉,前面分享过selenium的18般武艺,再加上五种js的定位大法。
这些还不够的话,今天再分享一个定位神器jquery,简直逆天了!
 
一、jquery搜索元素
1.按F12进控制台
2.点全部按钮
3.右侧如果没出现输入框,就点下小箭头按钮
4.输入框输入jquery定位语法,如:$("#input1")

5.点运行按钮
6.左边会出现定位到的元素,如果有多个会以list列表的形式展示出。

二、jquery定位语法
1.jquery语法可以学下w3school的教程:http://www.w3school.com.cn/jquery/jquery_syntax.asp

2.格式如下:
$(selector).action()
--selector:这里的定位语法和css的定位语法是一致的,如:id就是#,class就是点(.),tag标签名前面就无符号
--action:这个是定位元素之后的操作行为事件,如click

三、jquery行为
1.发送文本语法:$(selector).val(输入文本的值)
2.清空文本语法:$(selector).val('')   # 空字符串,两个单引号
3.点击按钮:$(selector).click()

四、参考脚本

# coding:utf-8
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("https://passport.cnblogs.com/user/signin")
driver.implicitly_wait(20)
# 输入账号
username = "$('#input1').val('上海-悠悠')"
driver.execute_script(username)
# 清空文本
# time.sleep(5)
# clear = "$('#input1').val('')"
# driver.execute_script(clear)
# 输入密码
psw = "$('#input2').val('yoyo')"
driver.execute_script(psw)
# 点击登录按钮
button = "$('#signin').click()"
driver.execute_script(button)