1月11日学习内容整理:请求库selenium之选择器,等待元素被加载
首先引入:
from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.common.keys import Keys #键盘按键操作 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素
driver = webdriver.Chrome()
注意:
》》find_element 永远是找第一个符合要求的标签
》》find_elements 是找所有符合要求的标签,列表形式输出
》》可以简写为find_element(By.ID,'kw') 这样的形式
1、通过id值
input_tag=driver.find_element_by_id("xxx") 得到的也是一个selenium对象
2、通过文本值
login=driver.find_element_by_link_text('登录') 查找文本值为登录的标签
login.click() 点击查找到的标签
3、通过文本值的模糊匹配
login=driver.find_element_by_partial_link_text('登') 查找文本值包含登的标签
4、通过class值
login_for_user=driver.find_element_by_class_name('xxx') 查找class值为xxx的第一个标签
5、通过标签名
driver.find_element_by_tag_name('a') 查找第一个a标签
6、通过name属性值
input_user=driver.find_element_by_name('user') 查找name属性值为user的第一个标签
补充1:
返回的selenium对象的属性和方法
# 打印标签名 print(input_tag.tag_name)# 打印标签的name属性值,就是获取标签的所有属性或者某个属性值 print(input_tag.get_attribute('name'))# 打印标签的文本值 print(input_tag.text)# 打印标签的id值 print(tag.id)# 打印标签的坐标位置,通常用在图片标签中,返回字典,key分别是x和y,可以用 # ['x']或者['y']取值 print(tag.location) # 打印标签的尺寸,返回字典,key分别是width height,可以用key取value值 print(tag.size)
补充2:
之前我们用的WebDriverWait是显性等待,每次要有写wait.until,而隐形等待则不需要
隐形等待:3同样代表等待时间3秒
driver.implicitly_wait(3) #使用隐式等待
7、xpath:比起上述6个定位更精准
(1)//和/://代表从整篇文档中查找,所有的元素;/代表从开头找,第一个子元素,找不到就报错
driver.find_element_by_xpath('//body/a') # 开头的//代表从整篇文档中寻找,body之后的/代表body的儿子,这一行找不到就会报错了 driver.find_element_by_xpath('//body//a') # 开头的//代表从整篇文档中寻找,body之后的//代表body的子子孙孙
(2)获取第几个元素:一定注意这里找第几个就写几,不代表索引
res1=driver.find_elements_by_xpath('//body//a[1]') #取第一个a标签
(3)按照属性查找:用到中括号[ ],前面要加@,再写属性名=属性值,遇到模糊查询时要用到contains函数就可以了
res2=driver.find_element_by_xpath('//a[@href="image5.html"]')#模糊查找 res3=driver.find_element_by_xpath('//a[contains(@href,"image5")]')
(4)其它
# *代表所有标签 查找指定class值的所有标签,注意这里是elements,所以输出列表 driver.find_elements_by_xpath('//*[@class="xxxxx"]') # 这样连着写中括号,代表且的关系,查找所有div标签中class值为指定的两个值的标签 driver.find_elements_by_xpath('//div[@class="xxxxx"][@class="yyyyy"]') # 查找所有的a标签,条件是a标签中的img标签的src属性值为指定内容,注意这里是element,所以只返回一个selenium对象 print(driver.find_element_by_xpath('//a[img/@src="data:image2_thumb.jpg"]').text) # 查找所有a标签的父元素中的第一个,因为这里是element,第一个点代表a标签这一级,第二个点表示上一级元素 print(driver.find_element_by_xpath('//a/..').tag_name) # 查找所有的img标签的父元素,这里是elements,所以返回列表 print(driver.find_elements_by_xpath('//img//..'))
8、css选择器:就直接写css选择器的语法就可以
tag=driver.find_elements_by_css_selector('div a')
》》》》》等待元素被加载完
注意:我们查找标签的基础是这个标签已经加载完毕,或者某个事件加载完后,若标签还没加载完我们就去查找这时就会出现问题,所以要用到显性等待WebDriverWait,当然直接用隐形等待也可以
wait=WebDriverWait(driver,3),括号中用By来查找标签,可以用id值,class值,标签名,css选择器CSS_SELECTOR等
(1)等待某个标签加载完后
login_for_user=wait.until(EC.presence_of_element_located((By.CLASS_NAME,'tang-pass-footerBarULogin')))
(2)等待某个标签点击事件加载完后
login_for_user=wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'tang-pass-footerBarULogin')))
(3)等待所有标签加载完后
login_for_user = wait.until(EC.presence_of_all_elements_located)
返回的selenium对象
转载于:https://www.cnblogs.com/wanghl1011/articles/8268750.html
1月11日学习内容整理:请求库selenium之选择器,等待元素被加载相关推荐
- 9月11日学习内容整理:正则表达式,re模块
一.正则表达式:正则是很大的一个知识点,不会仅仅是下面这些东西 1.概念:正则表达式就是一种对字符串匹配的规则,注意是只对字符串,正则表达式和python没啥关系, 2.表达式: (1)字符集:用中括 ...
- 11月17日学习内容整理:jquery文档处理,事件细讲,动画
一.文档处理:下面举例中的B可以是标签也可以是选择器也可以是字符串 >>>添加到指定元素内部的后面 $(A).append(B) // 把B放到A内部元素的最后,A是父节点$(A). ...
- 3月19日学习内容整理:redis
1.定义 redis是一个软件,来帮助我们在内存中存储数据,支持持久化 mysql也是一个软件,是帮助我们在硬盘中存储数据 2.应用 由于速度快 可做缓存,存储一些不常改变的数据 临时数据 消息队列 ...
- 1月24日学习内容整理:Django的admin组件源码分析及流程
一.单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用 ...
- 11月8日学习内容整理:js的引入方式,变量数据类型,运算符,流程控制,函数...
js是一门成熟的编程语言,专门用浏览器客户端执行的语言 一.js的引入方式 1.直接在body标签中使用script标签写js语言 2.通过script标签导入js文件,<script sr ...
- 1月8日学习内容整理:JS的作用域和作用域链
补充: 对于编译型语言,是编译一次生成可执行文件来执行多次:对于解释型语言,始终都是编译一次执行一次 python编译时要看有没有赋值操作,没有的话就不编译任何内容:若有赋值操作,才会开辟内存空间,把 ...
- 1月16日学习内容整理:爬虫框架:Scrapy
@@@老师博客地址::::: http://www.cnblogs.com/linhaifeng/articles/7811861.html 一.介绍 Scrapy一个开源和协作的框架,其最初是为了页 ...
- 1月19日学习内容整理:Scrapy框架补充之scrapy-redis组件
1. scrapy-redis组件 任务:爬取抽屉新热榜咨询(10个小时) - 加内存 - 多开几个电脑 - 多进程 - 多开几个爬虫任务 - 网 安装: pip3 install scrapy-re ...
- 12月12日学习内容整理:Ajax中的contentType参数,csrf跨域请求处理,serialize方法...
一.contentType参数 1.用来标识请求的数据格式 2.默认值: "application/x-www-form-urlencoded" 代表是urlencoded编码 ...
最新文章
- 【问题收集·中级】关于XMPP使用Base传送图片
- 【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )
- (转载)Android手机开发总结
- boost::math::relative_difference相关用法的测试程序
- 通通玩blend美工(8)——动态绘制路径动画,画出个萌妹子~
- Swift中文教程(十一) 方法
- 使用OpenExif修改jpeg图片信息
- android webview 太大,Android应用开发之Android WebView加载图片显示过大的处理教程(代码教程)...
- 翻译连载 | JavaScript轻量级函数式编程-第5章:减少副作用 |《你不知道的JS》姊妹篇...
- 转载 WebService 的CXF框架 WS方式Spring开发
- 关于webpack编译scss文件
- 在EF4.1的DBContext中实现事务处理(BeginTransaction)和直接执行SQL语句的示例
- OpenCV3.4.1+VS2018 安装并配置详细教程
- BeanAir—无线传感器测试方案
- 超链接标签a实现跳转
- 如何将音乐复制到您的Android手机
- android自定义控件不显示,解决Android Studio Design界面不显示layout控件的问题
- TCP协议:报文字段解析
- Clickhouse在头条火山引擎智能数据洞察的应用
- babel安装失败/报错详细解决方案报以下错误: core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended