Python+Selenium学习笔记6 - 定位
1.8种针对单个元素的定位方法
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
2..8种针对多个元素的定位方法
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
3.可能出现的问题
若查找的元素不止一个,但只用了find_element_...方法时,会出现如下提示。是因为漏掉elements
TypeError: 'FirefoxWebElement' object is not iterable
注意
刚开始时用上面的方法定位经常定位不到,后来发现了以下原因
1.没有留意页面元素有无用frame/iframe表单。若有,需要用switch_to.frame()先定位到frame/iframe表单的内嵌页面中,再用find_element_by...定位。
若下一个定位元素不在这个表单了,则需要用switch_to.parent_content()跳出当前一级表单,或用switch_to.default_content()跳回最外层的页面。
2.用find_element_by_xpath()定位时,直接用Firefox浏览器的页面元素用右键复制xpath时是这个格式"/html/body/div[2]/div[2]/div/div[1]/div[1]/div[1]/a[3]"。 Python有时候能定位到,但大多数时候是定位不了的,这时候就要修改一下这个path了。先从右往左逐级查找有唯一的且可用的属性值。如下图为例:path是/html/body/div[2]/div[2]/div/div[1]/div[1]/div[1]/a[3] 最底下一层<a class="toptitle"...>有三个,所以不能直接用这个属性,再看它的父对象<div class="right">,往上查找只有这里用到,
所以xpath可改为 //*[@class='right']/a[3]。又有一种情况class='right'有两个,而我要用的元素还有一个属性id='red',那就可以这么写//*[@class='right' and @id='red' ]/a[3]

靠着上面两点,目前为止都能定位到页面元素了。
Python+Selenium学习笔记6 - 定位的更多相关文章
- Python+Selenium学习笔记15 - 读取txt和csv文件
读取txt的内容并用百度查找搜索 1 # coding = utf-8 2 3 from selenium import webdriver 4 import time 5 6 # 打开浏览器 7 d ...
- python + selenium 学习笔记 -摘要
一.浏览器操作相关 from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() # 窗口最大 ...
- Python+Selenium学习笔记17 - HTML测试报告
运行少量case时 1 # coding = utf-8 2 3 from selenium import webdriver 4 import unittest 5 import time 6 fr ...
- Python+Selenium学习笔记10 - send_keys上传文件
在火狐浏览器上传文件 上传前,同一个HTML文件在火狐和Edge浏览器显示有些不同 这是Firefox浏览器的显示 这是Edge浏览器 上传后 1 # coding = utf-8 2 3 from ...
- Python+Selenium学习笔记9 - 警告框处理
如下图所示,这种窗口是不能通过前端工具对其进行定位的,这里可以通过switch_to_alert()方法去接受这个弹窗 1 # coding = utf-8 2 3 from selenium imp ...
- Python+Selenium学习笔记8 - 多表单&多窗口切换
1.多表单切换 下图为待测页面:内嵌百度首页 切换到百度首页进行操作 1 # coding = utf-8 2 3 from selenium import webdriver 4 import os ...
- Python+Selenium学习笔记5 - python官网的tutorial - 交互模式下的操作
这篇笔记主要是从Python官网的Tutorial上截取下来,再加上个人理解 1. 在交互模式下,下划线'_'还可以表示上一步的计算结果 2.引号转义问题. 从下图总结的规律是,字符串里的引号如果和引 ...
- Python+Selenium学习笔记1 - pip命令
1.用pip命令安装模块 pip install 模块名 e.g. pip install qrcode 2.用pip卸载模块 pip uninstall 模块名 e.g. pip uninstall ...
- Python+Selenium学习笔记18 - 不开启浏览器测试
运行脚本时间比较长时可以不打开浏览器测试,这样在测试运行时,电脑还是可以用作其他操作的. 只需要在运行脚本上加上下面代码的678行即可 1 # coding = utf-8 2 3 from sele ...
随机推荐
- 数据结构之LinkedList | 让我们一块来学习数据结构
highlight: monokai theme: vue-pro 上一篇文章中使用列表(List)对数据排序,当时底层储存数据的数据结构是数组.本文将讨论另外一种列表:链表.我们会解释为什么有时链表 ...
- 进击中的Vue 3——“电动车电池范围计算器”开源项目
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://dzone.com/articles/build-a-tesla-battery- ...
- 1.7.9- HTML合并单元格实例
- linux下安装并使用msgfmt命令
msgfmt安装方法: sudo apt-get install gettext 编码 po 文件为 mo 文件: msgfmt -o test.mo test.po mo 文件反编码成 po文件: ...
- mysqli_fetch_array()、mysqli_fetch_assoc、mysqli_fetch_row()和mysqli_fetch_object()的区别
mysqli_fetch_array() 来使用或输出所有查询的数据. mysqli_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有 返回根据从结果集取得的行生 ...
- XCTF-i-get-id-200
i-get-id-200 题目描述 嗯..我刚建好了一个网站 解题过程 一共有三个页面 Hello World 告诉了页面是perl写的 Forms 输入name和age会返回渲染后的字符串 搜了一下 ...
- XCTF-supersqli
supersqli 进来有个输入框,看内容应该是var_dump了sql查询结果 单引号有报错,万能语句能用,注释符#没被ban 打了个union select,给提示ban了一堆关键字,而且忽略大小 ...
- 标签页切换title改变
js实现如下 并将代码加入博客侧边栏就成了 <script> document.addEventListener("visibilitychange", functio ...
- Windows进程间通讯(IPC)----内存映射文件
内存映射文件原理 内存映射文件是通过在虚拟地址空间中预留一块区域,然后通过从磁盘中已存在的文件为其调度物理存储器,访问此虚拟内存空间就相当于访问此磁盘文件了. 内存映射文件实现过程 HANDLE hF ...
- Redis6.x学习笔记(二)持久化之RDB
前言 最近学习Redis6.x,特做笔记以备忘,与大家共学.课程是从私塾在线下载的,他们把架构师课程都放出来了,大家可以去下载学习,不要钱的,地址是http://t.hk.uy/eK7,课程很不错,值 ...