python xpath定位不到_Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)...
#coding=utf-8
'''Created on 2016-7-20
@author: Jennifer
Project:登录百度账号
'''
from selenium importwebdriver
importtime
driver =webdriver.Firefox()
driver.get("http://www.baidu.com/")
time.sleep(3)
#点击登录:有些name为tj_login的元素为不可见的,点击可见的那个登录按钮即可。#否则会报:ElementNotVisibleException
element0=driver.find_elements_by_name("tj_login")
for ele0 inelement0:
ifele0.is_displayed():
ele0.click()
#在登录弹出框,需先定位到登录弹出框#否则会报:NoSuchElementException
element1=driver.find_element_by_class_name("tang-content")
element11=element1.find_element_by_id("TANGRAM__PSP_8__userName")
element11.clear()
element11.send_keys("登录名")
element2=element1.find_element_by_id("TANGRAM__PSP_8__password")
element2.clear()
element2.send_keys("密码")
element3=element1.find_element_by_id("TANGRAM__PSP_8__submit")
element3.click()
element3.submit()
try:
assert "登录名" indriver.page_source
exceptAssertionError:
print "登录失败"
else:
print "登录成功"time.sleep(3)
finally:
print "测试记录:已测试"driver.close()
6.不可见元素定位
如上百度登录代码,通过名称为tj_login查找的登录元素,有些是不可见的,所以加一个循环判断,找到可见元素(is_displayed())点击登录即可。
出错: NoSuchElementException: Message: Unable to locate element
出错原因
1.可能元素加载未完成
元素加载没完成,同样的路径定位,每次测试结果确是不一样的,有时候抛出错误,有时候正常!这就比较蛋疼了,也就是说,和你的定位方法半毛钱关系没有,而很大程度上取决于你的电脑和网速!
1.解决方案A:添加两行代码
wait = ui.WebDriverWait(driver,10)
wait.until(lambda driver: driver.find_element_by_方法("定位路径自己来"))
WebDriverWait(driver,10)的意思是;10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后结束。driver是前面操作webdriver.firefox()的句柄
完整的小段代码是:
from selenium import webdriver
import selenium.webdriver.support.ui as ui
driver_item=webdriver.Firefox()
url="https://movie.douban.com/"
wait = ui.WebDriverWait(driver_item,10)
driver_item.get(url)
wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div/div/label[5]"))
driver_item.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div/div/label[5]").click()
1.解决方案B:使用while+try…except结合
下面来个例子,完整的可运行代码如下:
from selenium import webdriver
import time
import os
driver_item=webdriver.Firefox()
url="https://movie.douban.com/"
driver_item.get(url)
while 1:
start = time.clock()
try:
driver_item.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div/div/label[5]").click()
print '已定位到元素'
end=time.clock()
break
except:
print "还未定位到元素!"
print '定位耗费时间:'+str(end-start)
运行结果如下:
还未定位到元素!
已定位到元素
定位耗费时间:0.262649990301
python xpath定位不到_Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)...相关推荐
- Python学习中的无效语法常见原因和解决办法分析
Python以其简单的语法而闻名.然而,当您第一次学习Python时,或者当您具有另一种编程语言的坚实背景时,您可能会遇到一些Python不允许的事情.如果您在尝试运行Python代码时收到过Synt ...
- Python 库兼容性问题-fromstring() has been removed. Please call frombytes() instead.原因及解决办法
使用 VideoCapture 运行程序时报错了:fromstring() has been removed. Please call frombytes() instead. 原因是 VideoCa ...
- python open文件失败_python open打开文件失败原因及解决办法
1.问题: 今天遇到一个问题,在使用绝对路径open(filename,mode)时失败 代码如下: try: source=open('D:\eclipse-workspace\AcrSoftwar ...
- python内核死亡的原因_Kernel Panic常见原因以及解决方法
Technorati 标签: Kernel Panic 出现原因 1. Linux在中断处理程序中,它不处于任何一个进程上下文,如果使用可能睡眠的函数,则系统调度会被破坏,导致kernel panic ...
- Python如何安装模块,python模块安装失败的原因以及解决办法
前言 今天来给刚开始学习python的朋友讲解一下 如何安装python模块, python模块安装失败的原因以及解决办法 很多朋友拿到代码之后,就开始复制粘贴 --> 然后右键进行运行 结果就 ...
- Python一直报错:SyntaxError: invalid syntax 的原因及解决办法
本篇文章主要讲解 python报错提示 无效语法 SyntaxError: invalid syntax 的原因及解决办法 日期:2022年2月18日 作者:任聪聪 报错现象 python报错如下,但 ...
- python定位相邻节点_Python selenium —— 父子、兄弟、相邻节点定位方式详解
今天跟大家分享下selenium中根据父子.兄弟.相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点. ...
- python定位相邻节点_Python selenium 父子、兄弟、相邻节点定位方式详解
今天跟大家分享下selenium中根据父子.兄弟.相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点. ...
- seleniumpython定位网页元素方法_Python+Selenium 定位元素
1.摘取网页上所有邮箱 练习场景:在某一个网页上有些字段是我们感兴趣的,我们希望摘取出来,进行其他操作.但是这些字段可能在一个网页的不同地方.例如,我们需要在关于百度页面-联系我们,摘取全部的邮箱. ...
最新文章
- 微信小程序上传图片到服务器不显示,微信小程序上传图片到服务器wx.uploadFile...
- jinja2的转义详解
- 项目中的那些事---下载pdf文件
- Solr中的前缀和后缀匹配
- 注意力机制 神经网络_图注意力网络(GAT)
- 动态规划-01背包问题详解
- linux 的终端字体色和背景色的修改方法(二)
- c语言定义一个字母的范围,C语言学习知识程序设计试卷及其规范标准答案
- html怎么帮图片占位,css+html实现Skeleton Screen 加载占位图动画效果(带动画)
- 95-30-018-Channel-AbstractNioByteChannel
- java 微信 jssdk 分享朋友圈_微信JS-sdk分享到朋友圈无效
- Atitit 泛型的知识点 目录 1. 为什么需要泛型 why	2 2. 定义分类 what	2 2.1. 编辑类型参数	2 2.2. 模板	2 2.3. 简单理解 占位符 代替object、	3
- 有趣好玩的python编程网站
- vscode更换主题颜色(护眼色)
- 百度云apkg手机文件怎么打开_30秒教你找回vivo手机误删文件,要是你不会的话,那也太可惜了吧...
- 高通功耗调试17之TLOC DEAMON导致待机/亮屏电流异常问题
- 干货,值得收藏!Python 操作 Excel 报表自动化指南!
- 湖北省2021年高考成绩查询日期,湖北2021年高考查分及志愿填报时间公布!
- 转(Google 全国 地图 纠偏数据 偏移数据 火星坐标修正 方案 )
- 河北科技师范学院对口计算机分数线,河北科技师范学院对口分数线
热门文章
- 【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能
- Asp.Net Core 轻松学-经常使用异步的你,可能需要看看这个文章
- .NET MVC CSRF/XSRF 漏洞
- 初探SQL Server 2017 on Docker@macOS
- Orleans稍微复杂的例子—互动
- 微软宣布12月15日关闭开源软件托管平台CodePlex
- 后端架构高可用可伸缩讲解之高可用
- 如何使Mac Docker支持SQL on Linux容器Volume特性
- python 打开某个exe_python定时检查启动某个exe程序(如果exe挂了)
- C语言九十四之请编写函数fun(char *str, int n),其功能是:使字符串str的前导*号不能多余n个,若多于n个,则删除多余的*号,若少于或等于n个,则不做处理。