首先引入:

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之选择器,等待元素被加载相关推荐

  1. 9月11日学习内容整理:正则表达式,re模块

    一.正则表达式:正则是很大的一个知识点,不会仅仅是下面这些东西 1.概念:正则表达式就是一种对字符串匹配的规则,注意是只对字符串,正则表达式和python没啥关系, 2.表达式: (1)字符集:用中括 ...

  2. 11月17日学习内容整理:jquery文档处理,事件细讲,动画

    一.文档处理:下面举例中的B可以是标签也可以是选择器也可以是字符串 >>>添加到指定元素内部的后面 $(A).append(B) // 把B放到A内部元素的最后,A是父节点$(A). ...

  3. 3月19日学习内容整理:redis

    1.定义 redis是一个软件,来帮助我们在内存中存储数据,支持持久化 mysql也是一个软件,是帮助我们在硬盘中存储数据 2.应用 由于速度快 可做缓存,存储一些不常改变的数据 临时数据 消息队列 ...

  4. 1月24日学习内容整理:Django的admin组件源码分析及流程

    一.单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用 ...

  5. 11月8日学习内容整理:js的引入方式,变量数据类型,运算符,流程控制,函数...

    js是一门成熟的编程语言,专门用浏览器客户端执行的语言 一.js的引入方式 1.直接在body标签中使用script标签写js语言 2.通过script标签导入js文件,<script   sr ...

  6. 1月8日学习内容整理:JS的作用域和作用域链

    补充: 对于编译型语言,是编译一次生成可执行文件来执行多次:对于解释型语言,始终都是编译一次执行一次 python编译时要看有没有赋值操作,没有的话就不编译任何内容:若有赋值操作,才会开辟内存空间,把 ...

  7. 1月16日学习内容整理:爬虫框架:Scrapy

    @@@老师博客地址::::: http://www.cnblogs.com/linhaifeng/articles/7811861.html 一.介绍 Scrapy一个开源和协作的框架,其最初是为了页 ...

  8. 1月19日学习内容整理:Scrapy框架补充之scrapy-redis组件

    1. scrapy-redis组件 任务:爬取抽屉新热榜咨询(10个小时) - 加内存 - 多开几个电脑 - 多进程 - 多开几个爬虫任务 - 网 安装: pip3 install scrapy-re ...

  9. 12月12日学习内容整理:Ajax中的contentType参数,csrf跨域请求处理,serialize方法...

    一.contentType参数 1.用来标识请求的数据格式 2.默认值: "application/x-www-form-urlencoded"   代表是urlencoded编码 ...

最新文章

  1. 【问题收集·中级】关于XMPP使用Base传送图片
  2. 【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )
  3. (转载)Android手机开发总结
  4. boost::math::relative_difference相关用法的测试程序
  5. 通通玩blend美工(8)——动态绘制路径动画,画出个萌妹子~
  6. Swift中文教程(十一) 方法
  7. 使用OpenExif修改jpeg图片信息
  8. android webview 太大,Android应用开发之Android WebView加载图片显示过大的处理教程(代码教程)...
  9. 翻译连载 | JavaScript轻量级函数式编程-第5章:减少副作用 |《你不知道的JS》姊妹篇...
  10. 转载 WebService 的CXF框架 WS方式Spring开发
  11. 关于webpack编译scss文件
  12. 在EF4.1的DBContext中实现事务处理(BeginTransaction)和直接执行SQL语句的示例
  13. OpenCV3.4.1+VS2018 安装并配置详细教程
  14. BeanAir—无线传感器测试方案
  15. 超链接标签a实现跳转
  16. 如何将音乐复制到您的Android手机
  17. android自定义控件不显示,解决Android Studio Design界面不显示layout控件的问题
  18. TCP协议:报文字段解析
  19. Clickhouse在头条火山引擎智能数据洞察的应用
  20. babel安装失败/报错详细解决方案报以下错误: core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended

热门文章

  1. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本强势发布
  2. Python脚本备份数据库
  3. maven学习(上)- 基本入门用法
  4. 查看 SELinux状态及关闭SELinu
  5. Word 2003安全模式修复程序
  6. 怎样用Java自制优秀的图片验证码?这样!
  7. PodPresent-K8s时区配置
  8. flex将元素放在最后_前端布局——Flex弹性布局
  9. hystrix相关配置
  10. Spring 事务core 模块-元数据metaData 模块