Xpath选择、操作web元素
11月6日
xpath选择
XPath(XML Path Language)是W3C(World Wide Web Consortium)定义的用来在XML文档中选择节点的语言,
主浏览器也支持XPath语法(1.X),对于浏览器原生支持XPath的,Selenium尽量使用原生的XPath实现,有些浏览器也支持通过XPath来访问。xpath的语法 看起来非常像电脑文件系统的路径
xpath验证方法 //option
console中 $x('//option')
element tab中
根节点:根节点用 / 表示:对应整个html文档 $x('/')
/html -对应html节点
/html/body/div 继续选择html下面的一层层节点 find_elements_by_xpath('/html/body/div')
假如路径起始于正斜杠(/),则此路径始终代表到某元素的绝对路径
/ 符号比较像css 中的 > 符号 直接子元素
//符号的作用
选择整个文档中的所有的option节点,不管什么位置
当前节点 一开始,我们的当前节点就是根节点,通常html 随后,路径当前部分就是当前节点,比如 /html/body/span
//表示从当前节点寻找所有的后代元素,寻找所有的后代元素,不管它在什么位置
如果以//开头就表示从根节点开始,寻找所有的后代元素
//div//p 表示选择所有的div元素里面的p元素,不管div在什么位置,不管p元素在div下面的什么位置 $x('//div//p') <==> $$('div p') ,单斜杠表示直接子节点,双斜杠表示后代
//div/p 就等于css选择器的什么写法? $x('//div/p') <==> $$('div >p') 直接子节点
通配符 和css一样,xpath也有通配符 *
//div/* 选择div下面所有的元素 等价于css $$('div > *')
根据属性选择
//*[@style] 选择所有具有style属性元素 *style
//p[@spec='len2'] 选择所有具有spec 值为len2 的元素 注意:css中如果属性值,如果没有空格可以不加引号,但是xpath则必须要引号,单双引号都可以 p[spec='len2']
根据id选择:id、class也是属性 //*[@id="food"] //div[@id="food"] //div[@class="cheese"]
子元素选择
选择属于其父元素的第n个某个类型的子元素
//p[2]等价于 p:nth-of-type(2)
//*[@id="food"]/p[1] 等价于 #food > p:nth-of-type(1)
//*2 所有类型的第二个
选择属于其父元素的倒数第n个某个类型的子元素
//span[last() -1] 属于其父元素的倒数第二个span span:nth-last-of-type(2)
//*[@id ="food"]/span[last()]
//*[last()-1]
选择属于其父元素的第n个子元素(基本所有类型元素)
//*[2] 等价于 //*[position()=2] 等价于 *:nth-child(2)
//*[@id = "food"]/*[position()=3]
支持其他的比较操作符
//*[@id = "food"]/*[position() < 3] 前两个
//*[@id = "food"]/*[position() <= 3] 前三个
选择属于其父元素的倒数第n个子元素
//*[@id = "food"]/*[last()-1]等价于//*[@id ="food"]/*[position()=last()-1]
多选 //*[@id = "food"]/*[position() > last() -3] 后面三个
组选择
用多个表达式一起
css 用,隔开
比如p,button
Xpath用 | 隔开
//p | //button
其他选择语法
参考 http://www.w3school.com.cn/xpath/xpath_axes.asp
相邻兄弟选择器
following-sibling 后面的兄弟 css: #food ~ div 《=》xpath: //*[@id = "food"]/following-sibling::div
#food +div 紧跟着的兄弟
preceding-sibling
xpath 擅长的 选择父节点 ..符号,position函数,结合比较操作符
//*[@id = "food"]/..
food = driver.find_element_by_xpath("//*[@id = 'food']")
eles = food.find_elements_by_xpath('.//p) 这里要加一个点,表示当前的food
for ele in eles:
print('..........................')
print(ele.get_attribute('outerHTML'))
Selenium 作业 4
登录 http://www.51job.com
点击高级搜索
输入搜索关键词 python
地区选择 杭州
职能类别 选 计算机软件 -> 高级软件工程师
公司性质选 外资 欧美
工作年限选 1-3 年 搜索最新发布的职位, 抓取页面信息。 得到如下的格式化信息 Python开发工程师 | 杭州纳帕科技有限公司 | 杭州 | 0.8-1.6万/月 | 04-27
Python高级开发工程师 | 中浙信科技咨询有限公司 | 杭州 | 1-1.5万/月 | 04-27
参考答案,往下翻
# coding:utf8
from selenium import webdriver
executable_path = r"d:\tools\webdrivers\chromedriver.exe" driver = webdriver.Chrome(executable_path)
driver.implicitly_wait(10) # 打开网址
driver.get('http://www.51job.com') # 选择高级搜索
driver.find_element_by_css_selector('div.ush > a').click() # 输入选择关键词
driver.find_element_by_id('kwdselectid').send_keys('python') # 工作地点选择
driver.find_element_by_id('work_position_input').click() # 取消 已经选择的
selectedCityEles = driver.find_elements_by_css_selector('#work_position_click_center em[class=on]') for one in selectedCityEles:
one.click() # 选杭州
driver.find_element_by_id('work_position_click_center_right_list_category_000000_080200').click() # 保存选择
driver.find_element_by_id('work_position_click_bottom_save').click() # 要点一下别的地方, 否则下面的元素会被挡住
driver.find_element_by_css_selector('div.tit').click() # 职能类别 选 计算机软件 -> 高级软件工程师 driver.find_element_by_id('funtype_click').click() driver.find_element_by_id('funtype_click_center_right_list_category_0100_0100').click() driver.find_element_by_id('funtype_click_center_right_list_sub_category_each_0100_0106').click() driver.find_element_by_id('funtype_click_bottom_save').click() # 公司性质选 外资 欧美
driver.find_element_by_id('cottype_list').click()
driver.find_element_by_css_selector('#cottype_list span.li[data-value="01"]').click() # 工作年限选
driver.find_element_by_id('workyear_list').click()
driver.find_element_by_css_selector('#workyear_list span.li[data-value="02"]').click() # 点击搜索
driver.find_element_by_css_selector('div.p_sou > span.p_but').click()或者 driver.find_element_by_css_selector("span.p_but[onclick^='kwdGoSearch']").click() # 结果列表获取内容
jobs = driver.find_elements_by_css_selector('#resultList div[class=el]') for job in jobs:
fields = job.find_elements_by_tag_name('span')
stringFilelds = [field.text for field in fields]
print (' | '.join(stringFilelds)) driver.quit()
Xpath选择、操作web元素的更多相关文章
- 选择、操作web元素-2
11月3日 等待web元素的出现 例子:百度搜索松勤网,点击操作后不等待页面刷新,下面选择页面元素的时候,该元素还是未出现 sleep方案的弊病:固定的等待时间,导致测试用例执行时间很长 为什么cli ...
- 选择、操作web元素
11月1日 什么是web元素 Selenium自动化主要就是:选择界面元素,操作界面元素(输入操作:点击.输入文字.拖拽等,输出操作:获取元素的各种属性),根据界面上获取的数据进行分析和处理 选择元素 ...
- 选择、操作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 ...
- selenium怎么操作web页面常见的元素
总结一下selenium怎么操作web页面常见的元素. 主要有: 上传 alter dialog prompt dialog confirm dialog select list radio box ...
- Appium之选择/操作元素
Appium是如何选择.操作元素的呢? appium自动化 ------ 选择界面 元素 操作元素 ------- ① 点击 ② 输入字符 ③ 拖拽 ④ 获取页面元素的各种属性 根据appium ...
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...
- Selenium选择web元素
获取html片段可以用来做什么? 可以用来分割,也可以分析HTML文档 beautifulsoup用法? 安装beautifulsoup库: pip install beautifulsoup4 因为 ...
随机推荐
- [ZZ]Appium 文档翻译
http://testerhome.com/topics/150 Appium 是一个开源的,适用于原生或混合移动应用应用( hybrid mobile apps )的自动化测试平台. Appium ...
- vo和pojo
pojo直接描述数据库中的表和字段,一一对应 vo的话,可以多添加些属性,比如code对应的name,或者标识符等等 查询列表的时候也可以直接用vo,但是修改或添加记录必须是pojo QueryVo ...
- 廖雪峰Java2面向对象编程-5包和classpath-1包package
1.package的意义 如下,存在多个相同类名的文件.当引用Person类,将无法确定引用小红,还是小明的Person类,即同名类的冲突. 小明的Person类:Person 小红的Person类: ...
- VS2008--VS2013 各种版本官方下载地址
很多刚入门的学生都不知道从哪里下载Visual studio 编译器 , 我特闲的纯手工整理了下 Visual Studio 2005 Professional 官方90天试用版 英文版:http:/ ...
- centos7.0KVM虚拟化
需要在图形化界面完成实验 查看CPU信息 # cat /proc/cpuinfo centos7默认安装的虚拟化包 # yum list open*tools 如果没安装就安装 #yum instal ...
- Python基础知识(五)
# -*- coding: utf-8 -*-# @Time : 2018-12-25 19:31# @Author : 三斤春药# @Email : zhou_wanchun@qq.com# @Fi ...
- Win10开发环境配置
基本环境变量配置:最近工作电脑固态硬盘损坏了,导致不得不重新装机,从前配置的环境需要重新配置,在此标记. Java环境配置: 添加变量 JAVA_HOME=D:\Program Files\Java\ ...
- 解决ExtNET ExtJS 特定日期选择月份跳转导致无法选择月份的问题
背景 项目使用 Ext.NET 2.2.0.40838 , 对应Ext JS4.2版本. 结果 2017/3/31 号的时候偶然间点日历选择控件选择2月,10月等月份突然就跳到3月份,9月份之类. 就 ...
- 02-Sockent客户端
package com.day1; import java.io.IOException; import java.io.OutputStream; import java.net.Inet4Addr ...
- delphi HTML转义字符编码转换
网上很多把HTML转换成纯文本格式的方法很多思路都是用正则表达式或者分析html代码替换的方法. 本文是利用IE完成转换,即利用IHTMLDocument2接口. Denon天Denon龙Denon ...