selenium-元素无法定位解决办法

 

有时会出现元素定位失败的情况,以百度首页为例,定位输入框,报错如下:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id='wd']

报错提示没有该元素,无法定位!

此处列举几个常见的,元素无法定位的情况,简单级。

1.属性名称与属性填写错误

因为操作时,为了提高效率或者说偷懒,经常将已写好同类命令的代码,复制粘贴,用于新的命令,有时就忘了修改,比如上一个元素定位是用 id ,这一次定位是用 name('wd'),复制粘贴后,find_element_by_id('wd'),于是定位失败。

2.点击速度过快,页面还没加载出来就点击页面上元素

打开一个新的页面时,可能页面还没加载出来,此时已经进行下一步操作,元素定位,于是报错。

此时需要设置等待时间

import time

time.sleep(2)  #强制固定等待2秒

3.动态 id 无法定位元素

比如淘宝web端登录,账号输入框,id就是动态的,每次打开都不同。

此时可以使用 css 定位或 xpath 定位

4.元素在 iframe 里导致元素定位失败

当元素在 frame 里,此时打开网页直接使用 id/name/xpath 是无法定位元素的。

以qq邮箱web端登录的账号输入框为例,查看元素显示是这样的……

……

  <iframe id="login_frame" name="login_frame" ……>

    ……

      <input type="text" class="inputstyle" id="u" name="u" value="" tabindex="1">

因为这个输入框在 iframe id="login_frame" 这个frame 里,此时直接 ele = browser.find_element_by_name('u') 会显示定位失败。

需要先定位frame,再定位里面的元素。

browser.switch_to.frame('login_frame')

browser.find_element_by_name('u')

切记,在 frame 操作完成后,要切换出去

driver.switch_to.default_content()

5.不在同一个 frame 里

有时,一个页面内有多个 frame,于是,比如左边有一栏left_frame,右边还有一栏right_frame,当你在某个frame里,就无法直接定位其他frame里的元素。

比如,打开页面后,需要定位左栏的元素:

browser.switch_to.frame('left_frame')  #切换进入左栏

browser.find_element_by_name('u')  #此时只能定位左栏的元素

但是之后又需要定位右栏的元素:

driver.switch_to.default_content()  #回到默认的content,此时只能定位页面上非frame内的元素

driver.switch_to.frame('right_frame')  #切换进入右栏

browser.find_element_by_name('u')  #此时只能定位右栏的元素

最后回到默认content,就可以回到页面默认内容,继续操作了:

driver.switch_to.default_content()

 
 

selenium-元素无法定位解决办法的更多相关文章

  1. python+selenium+bs4爬取百度文库内文字 && selenium 元素可以定位到,但是无法点击问题 && pycharm多行缩进、左移

    先说一下可能用到的一些python知识 一.python中使用的是unicode编码, 而日常文本使用各类编码如:gbk utf-8 等等所以使用python进行文字读写操作时候经常会出现各种错误, ...

  2. python+selenium 元素被定位到而且click()也提示执行成功,但是页面就是没有变化和跳转。

    python+selenium 元素被定位到而且click()也提示执行成功,但是页面就是没有变化和跳转. 如果多次定位和click(),有时候会跳转. 我遇到很多次就是很郁闷,有人说,操作太快的,页 ...

  3. IOS8下,百度地图无法定位解决办法

      通过在论坛中搜索,找到解决办法,我只是论坛的搬运工.分享如下:   1.在info.plist中加入: NSLocationAlwaysUsageDescription=YES NSLocatio ...

  4. 子元素的margin-top影响父元素原因和解决办法

    这个问题会出现在所有浏览器当中,原因是css2.1盒子模型中规定, In this specification, the expression collapsing margins means tha ...

  5. 移动端开发底部元素margin-bottom失效解决办法

    一.情景 记得之前开发一个微信端页面时,发现页面底部元素margin-bottom在ios下失效,在安卓内正常...... 1.safari浏览器内页面底部元素设置margin-bottom失效: 2 ...

  6. selenium 元素可以定位到,但是无法点击问题

    报错1: selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (82, ...

  7. Selenium学习(三)Selenium总是崩溃的解决办法

    在使用selenium打开浏览器总是崩溃,最近查资料获得可行的解决办法: import sys from selenium import webdriver p = __import__('selen ...

  8. selenium元素单击不稳定解决方法

    selenium自动化测试过程中,经常会发现某一元素单击,很不稳定,有时候执行了点击没有反映. 以下总结两种解决方法:都是通过js注入的方式去点击. 1.F12查一看,要点击的按钮,或连接,有没有on ...

  9. python+selenium滑动式验证码解决办法

    from selenium.webdriver import ActionChains action = ActionChains(driver) source=driver.find_element ...

  10. HTML兼容问题及解决办法

    标准浏览器子元素不会撑开父元素设置好的宽度,IE6下会的: <style> .box{ width:400px;} .left{ width:200px;height:300px;back ...

随机推荐

  1. CloudIDE:为开发者写代码开启“加速”模式

    摘要:华为云CloudIDE,以软件基础技术结合新时代业务场景,给开发者提供更高效.优质的开发体验,帮助开发者实现业务创新新动力,以硬核技术重塑云原生开发生产力. 本文分享自华为云社区<华为云C ...

  2. [VSC] HTML打叹号无法自动提示默认框架

    一般的, 在 VSC 中编辑 HTML 文档时, 打一个叹号 '!', 就会提示, 可生成默认代码, 如: 采纳建议后, 是这样: 问题: 如果出现打叹号无法出现提示的情况, 首先, 请检查当前的语言 ...

  3. 2.1.1- css产生的原因

    CSS的发展历程 从HTML被发明开始,样式就以各种形式存在.不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制.最初的HTML只包含很少的显示属性.随着HTML的成长,为了满足页面设计者的要 ...

  4. hdu4882 水贪心

    题意:      给你n个任务,每个任务有两个权值,t[i],b[i],前面的是完成任务所需时间,后面的那个是个参数,每个任务完成的代价是完成当前任务总时间(之前的+现在的) sumt * b[i], ...

  5. Web漏洞小结

    本文是对Web中最常见漏洞的一个小结: 注入类漏洞: SQL注入:SQL注入漏洞详解 XML注入:XXE(XML外部实体注入) 代码注入:代码注入漏洞 CRLF注入:CRLF注入 注入类漏洞是应用违背 ...

  6. Windows PE 第十二章 PE变形技术

    PE变形技术 这章东西太多,太细了.这里我只记录了一些重点概念.为后面学习做铺垫. PE变形:改变PE结构之后,PE加载器依然可以成功加载运行我们的程序. 一 变形常用技术: 结构重叠技术.空间调整技 ...

  7. 阿里面试官用HashMap把我问倒了

    本人是一名大三学生,最近在找暑期实习,其中也面试过两次阿里,一次菜鸟网络部门.一次网商银行部门,当然我都失败了,同时也让我印象很深刻,因此记录了其中一些面试心得,我觉得这个问题很值得分享,因此分享给大 ...

  8. Nebula Graph 的 Ansible 实践

    本文首发于 Nebula Graph 公众号 NebulaGraphCommunity,Follow & 看大厂图数据库技术实践 背景 在 Nebula-Graph 的日常测试中,我们会经常在 ...

  9. JavaWeb——MySQL多表

    内容索引 1. 多表查询 2. 事务 3. DCL 多表查询: * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE ...

  10. 用户对象/GDI对象/内核对象

    对象的分类 Windows的对象可以分为三种,分别是用户对象,GDI对象和内核对象.系统使用用户对象支持窗口管理,使用GDI对象支持图形,并使用内核对象支持内存管理,进程执行和进程间通信(IPC) . ...