#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)...相关推荐

  1. Python学习中的无效语法常见原因和解决办法分析

    Python以其简单的语法而闻名.然而,当您第一次学习Python时,或者当您具有另一种编程语言的坚实背景时,您可能会遇到一些Python不允许的事情.如果您在尝试运行Python代码时收到过Synt ...

  2. Python 库兼容性问题-fromstring() has been removed. Please call frombytes() instead.原因及解决办法

    使用 VideoCapture 运行程序时报错了:fromstring() has been removed. Please call frombytes() instead. 原因是 VideoCa ...

  3. python open文件失败_python open打开文件失败原因及解决办法

    1.问题: 今天遇到一个问题,在使用绝对路径open(filename,mode)时失败 代码如下: try: source=open('D:\eclipse-workspace\AcrSoftwar ...

  4. python内核死亡的原因_Kernel Panic常见原因以及解决方法

    Technorati 标签: Kernel Panic 出现原因 1. Linux在中断处理程序中,它不处于任何一个进程上下文,如果使用可能睡眠的函数,则系统调度会被破坏,导致kernel panic ...

  5. Python如何安装模块,python模块安装失败的原因以及解决办法

    前言 今天来给刚开始学习python的朋友讲解一下 如何安装python模块, python模块安装失败的原因以及解决办法 很多朋友拿到代码之后,就开始复制粘贴 --> 然后右键进行运行 结果就 ...

  6. Python一直报错:SyntaxError: invalid syntax 的原因及解决办法

    本篇文章主要讲解 python报错提示 无效语法 SyntaxError: invalid syntax 的原因及解决办法 日期:2022年2月18日 作者:任聪聪 报错现象 python报错如下,但 ...

  7. python定位相邻节点_Python selenium —— 父子、兄弟、相邻节点定位方式详解

    今天跟大家分享下selenium中根据父子.兄弟.相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点. ...

  8. python定位相邻节点_Python selenium 父子、兄弟、相邻节点定位方式详解

    今天跟大家分享下selenium中根据父子.兄弟.相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点. ...

  9. seleniumpython定位网页元素方法_Python+Selenium 定位元素

    1.摘取网页上所有邮箱 练习场景:在某一个网页上有些字段是我们感兴趣的,我们希望摘取出来,进行其他操作.但是这些字段可能在一个网页的不同地方.例如,我们需要在关于百度页面-联系我们,摘取全部的邮箱. ...

最新文章

  1. 微信小程序上传图片到服务器不显示,微信小程序上传图片到服务器wx.uploadFile...
  2. jinja2的转义详解
  3. 项目中的那些事---下载pdf文件
  4. Solr中的前缀和后缀匹配
  5. 注意力机制 神经网络_图注意力网络(GAT)
  6. 动态规划-01背包问题详解
  7. linux 的终端字体色和背景色的修改方法(二)
  8. c语言定义一个字母的范围,C语言学习知识程序设计试卷及其规范标准答案
  9. html怎么帮图片占位,css+html实现Skeleton Screen 加载占位图动画效果(带动画)
  10. 95-30-018-Channel-AbstractNioByteChannel
  11. java 微信 jssdk 分享朋友圈_微信JS-sdk分享到朋友圈无效
  12. Atitit 泛型的知识点 目录 1. 为什么需要泛型 why 2 2. 定义分类 what 2 2.1. 编辑类型参数 2 2.2. 模板 2 2.3. 简单理解 占位符 代替object、 3
  13. 有趣好玩的python编程网站
  14. vscode更换主题颜色(护眼色)
  15. 百度云apkg手机文件怎么打开_30秒教你找回vivo手机误删文件,要是你不会的话,那也太可惜了吧...
  16. 高通功耗调试17之TLOC DEAMON导致待机/亮屏电流异常问题
  17. 干货,值得收藏!Python 操作 Excel 报表自动化指南!
  18. 湖北省2021年高考成绩查询日期,湖北2021年高考查分及志愿填报时间公布!
  19. 转(Google 全国 地图 纠偏数据 偏移数据 火星坐标修正 方案 )
  20. 河北科技师范学院对口计算机分数线,河北科技师范学院对口分数线

热门文章

  1. 【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能
  2. Asp.Net Core 轻松学-经常使用异步的你,可能需要看看这个文章
  3. .NET MVC CSRF/XSRF 漏洞
  4. 初探SQL Server 2017 on Docker@macOS
  5. Orleans稍微复杂的例子—互动
  6. 微软宣布12月15日关闭开源软件托管平台CodePlex
  7. 后端架构高可用可伸缩讲解之高可用
  8. 如何使Mac Docker支持SQL on Linux容器Volume特性
  9. python 打开某个exe_python定时检查启动某个exe程序(如果exe挂了)
  10. C语言九十四之请编写函数fun(char *str, int n),其功能是:使字符串str的前导*号不能多余n个,若多于n个,则删除多余的*号,若少于或等于n个,则不做处理。