selenium02-元素无法定位解决办法(简单)

Posted maigeyouziba

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium02-元素无法定位解决办法(简单)相关的知识,希望对你有一定的参考价值。

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

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()

以上是关于selenium02-元素无法定位解决办法(简单)的主要内容,如果未能解决你的问题,请参考以下文章

py+selenium 无法定位ShowModalDialog模态窗口已解决

Selenium WebDriver定位不到元素的原因及解决办法

selenium webdriver定位不到元素的五种原因及解决办法

转载:selenium webdriver定位不到元素的五种原因及解决办法

PythonSelenium元素定位错误之解决办法

Selenium定位的元素被图层遮挡了的解决办法