Python 解决网页元素无法定位(NoSuchElementException: Unable to locate element)的几种方法

 出错形式 

 出错原因

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()
  • 解决方案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
  • 分析

开启页面后,并不是元素都一次性加载完成的,依赖于网速和电脑,从B方法中可见,所耗费的时间,还有一种静态的方法就是我以前常用的sleep,一般睡一秒就够了,但是对于不同电脑不同网速的情况,建议还是使用动态方法,也就是A方法,以变应变!

从代码可读性上和效率上都是A方法比较好,更加符合python的特性,简洁优美,而B方法应该是我这样初学者自己能想到的一种方法,先得自己想解决方案,然后再参考现有方法,我感觉这样才有意义。

2.本身定位方法错误

这也就是最常见的了,也是最容易犯的错误,自己对元素定位方法不够熟练,就很容易错误了,所以多想想该怎么定位才最容易,我现在最喜欢的是用xpath方法定位,DOM树的结构挺清晰的,可能我还是新手的原因吧!

  • 解决方案

定位到正确且唯一的标识位置

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".zxxw1"}是Selenium中常见的错误之一。这个错误是由于无法找到指定的元素导致的。在你提供的引用中,你可能遇到了这个错误并尝试使用CSS选择器去定位一个class为"zxxw1"的元素。然而,如果页面中没有这个元素,Selenium就无法找到它,从而抛出NoSuchElementException错误。 为了解决这个问题,有几种可能的方法可以尝试。首先,你可以确认页面上是否存在class为"zxxw1"的元素。你可以通过手动检查页面的HTML代码或者使用开发者工具来确认。 如果确认页面上确实存在该元素,那么可能是由于页面的加载问题导致Selenium无法找到该元素。你可以尝试使用等待机制来等待元素的出现,例如使用WebDriverWait和expected_conditions来等待元素的可见性或者存在性。 另外,你还可以尝试修改定位元素的方式。除了使用CSS选择器,还可以尝试使用其他方式来定位元素,比如使用XPath、ID、Name等。你可以根据具体的页面结构和元素属性来选择最适合的定位方式。 综上所述,解决NoSuchElementException错误的方法包括确认页面上是否存在该元素、使用等待机制等待元素的出现以及尝试不同的定位方式。希望这些方法对你有帮助! <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [《python3网络爬虫开发实战》学习笔记::selenium——xpath:Unable to locate element](https://download.csdn.net/download/weixin_38656337/14044639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate elemen](https://blog.csdn.net/u010501170/article/details/126199408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Scanner 踩坑:java.util.NoSuchElementException(csdn)————程序.pdf](https://download.csdn.net/download/weixin_44488560/54716356)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值