添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在定位元素时,始终都报找不到元素错误。可能的原因有一下几种:

1、元素定位错误

第一种情况就是你的元素定位表达式错误,根本就没有你表达式定位的这个元素,这时候就需要检查一下自己的表达式有没有写错了。当然这种情况出现的可能性不大,所以最有可能的原因还是以下几种

2、定位表达式不唯一

定位表达式不唯一,不能准确的定位到唯一的元素。比如下方通过find_element_by_class_name("top")来定位的话,就会发现有很多个元素的class值都为top。

解决办法:可以尝试换一种定位表达式,如果有id的话可以通过id来定位(一般情况下id都是唯一的),没有id也可以通过XPATH这些方式来定位

3、未切换窗口句柄

当前窗口的句柄还处在上一个窗口中,导致无法定位新窗口的元素。则需要在无法定位到的元素进行定位之前,先进行切换句柄,再进行定位操作。

num=driver.window_handles #获取当前页的所有句柄
driver.switch_to_window(num[1]) #跳到新的标签页;因为当前只有一个主页面和新的标签页,所以num[1]表示新标签
    页,num[0]表示主页面
driver.switch_to_window(num[0])#回到主页面的句柄

当有很多个新弹出的页面时,需要定位到最新的标签页时,可以采用循环遍历num的方式,让其一直获取当前的句柄。大致如下:

#循环遍历句柄
for handle in num:
driver.switch_to_window(handle)

4、有内嵌的iframe

  1. 今天我遇到的情况就是这种情况,一般出现在登录页面中,网页中内嵌了iframe(相当于嵌入了另一个页面),因为webdriver每次只能
        在一个页面识别,所以一直报错。
    解决办法:先进入相应的iframe页面,再进行定位
    如果没有id和name属性的话,可以直接通过传元素实现。我这边用的就是这种方法,因为下面的iframe虽然有name属性,但它的
        值是动态的。
driver.switch_to.frame(driver.find_element_by_class_name("ifr2")) #进入iframe中

当然可以直接通过id和name及frame的index来定位。

driver.switch_to.frame("name值") #通过name
driver.switch_to.frame("id值") #通过id
driver.switch_to.frame(0) #通过frame的index,第一个是0.这种方式没有尝试过是否生效

如果有嵌套的iframe的话,需要一层一层的从主页面逐层进入了

切进入了iframe页面以后,也要记得切回主页面,否则对主页面执行的元素定位操作也就报错啦。

退出iframe页面,返回主页面

driver.switch_to.default_content() #退出iframe页面,返回主页面

5、元素还未生成或者页面还没有加载出来就执行了定位操作

比如说进入了一个新的页面去获取某个元素,这个时候页面还在加载过程中,元素还没有生成就去执行了定位操作,自然是找不到要报错的。

解决办法:等待元素生成后再执行定位操作。等待方式有sleep()、implicitly_wait() 、WebDriverWait()三种,可根据情况选择最佳的方式。如果对等待方式不了解的,可以参照这篇博客: https://blog.csdn.net/qq_16555103/article/details/108130558

6、属性是动态生成的

还是第四种情况里面我举的例子,因为name值是动态的所以我选择了通过定位元素的方式进入iframe。如果我们直接通过name值来进行定位的,每一次重新进入该页面,它的name值都不一样,自然通过name值去定位就找不到元素了。

解决办法:使用其他的定位方式,可以选择xpath。有些情况下它的值可能是部分动态的,也可以直接通过模糊匹配定位的。

在定位元素时,始终都报找不到元素错误。可能的原因有一下几种:1、元素定位错误 第一种情况就是你的元素定位表达式错误,根本就没有你表达式定位的这个元素,这时候就需要检查一下自己的表达式有没有写错了。当然这种情况出现的可能性不大,所以最有可能的原因还是以下几种2、定位表达式不唯一定位表达式不唯一,不能准确的定位到唯一的元素。比如下方通过find_element_by_class_name("top")来定位的话,就会发现有很多个元素的class值都为top。解决办法:可以尝试换一种定位表..
selenium .common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“xpath”,“selector”:“.//div[contains(@class,“c-goods-item__market-price”)]/text()”}(Session info: chrome=99.0.4844.51) 抓取唯品会页面内容,以“小皮鞋”字段为例,代码如图
当然这里说的是css或者XPath都没写错, 定位 准确,也并非使用了不稳定的 定位 语句。 情况一:(StaleElementReferenceException: Message: Element not found in the cache...) 原因:页面被刷新了。 在当前页面 不到 这个 元素 了,但是你自己手...
这是一个 selenium 的异常信息,意思是在使用 css 选择器时 不到 对应的 元素 。具体原因可能是你使用的 css 选择器不 正确 或者页面上没有这个 元素 。建议你检查你的 css 选择器是否 正确 ,或者检查页面是否已经加载完成,是否有这个 元素 。 在用 Python 写一些自动登录脚本的时候,发现老是 定位 元素 失败,仔细检查了xpath没有 错误 ,运行报错 selenium .common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div/div/div/div/div[4]/button[1]"},换用css 定位 器等等都还是无法解决 关键代码如
在使用 selenium +爬虫的时候,经常会遇到一个问题,就是NoSuchElementException, 定位 不到 元素 的问题 一,打开了新页面,一般 selenium 点击新链接跳转打开了一个新页面,那么 定位 不到 元素 就很正常了,这种情况一般我们使用driver.get(url)来代替click(),dirver.get(url)就不会打开信的界面,而是在原来的浏览器上刷新了页面 二,fr...
switch_to.frame()默认可以直接取表单的id或name属性。如果没有可用的id和name属性,可以先 定位 到frame/iframe,再将 定位 对象传给switch_to.frame(对象)方法。 xf = driver.fin
如果 Selenium 无法 定位 元素 ,可以尝试以下方法来解决问题: 1. 确保页面已完全加载:在尝试 定位 元素 之前,需要等待页面完全加载。可以使用 WebDriver 的 `ExpectedConditions` 类来等待 元素 出现。 2. 检查 元素 定位 方式是否 正确 元素 定位 有多种方式,如 id、name、classname、css selector、xpath 等。如果使用的 定位 方式不 正确 ,则可能会导致 定位 失败。 3. 检查 元素 定位 属性是否 正确 :如果使用 id 或 name 等 元素 定位 属性 定位 失败,可能是因为属性值不 正确 。可以使用浏览器的开发者工具来查看 元素 的实际属性值。 4. 尝试等待 元素 出现:在尝试 定位 元素 之前,可以使用 WebDriver 的 `ExpectedConditions` 类来等待 元素 出现。 5. 尝试调整 元素 定位 的超时时间:如果 元素 的加载时间较长,可以尝试调整 元素 定位 的超时时间。可以使用 WebDriver 的 `timeouts` 方法来设置超时时间。 6. 尝试刷新页面:如果页面 元素 加载不完整或有 错误 ,则可以尝试刷新页面。 7. 尝试使用其他的
# 在支持的平台上使用 torch.compile 加速模型推理 # TODO peft 与 torch.compile 似乎不匹配, 是否注释 if torch.__version__ >= "2" and sys.platform != "win32": model = torch.compile(model) M1 芯片mac搭建环境遇到的问题 lucy_189: 啊啊啊太感谢了! 微调alpaca-lora遇到的一些问题 旅行ottffsse: 大佬,您好,我训练生成的文件中adapter_model.safetensors的大小只有1kb,这对吗? 基础知识_Scikit-learn(一) 自学AI的鲨鱼儿: 一些公开网课,很久远了 flash attention 参数(笔记) 自学AI的鲨鱼儿: 我觉得可能是这样,正常情况下,q k是同一个序列生成的,是等长度的,mask矩阵也就是我们最熟悉的下三角矩阵,如果q k 不是等长度的,首先让两个序列右边对齐,然后每个q只能看到它左边的结果,也就是flash atten 库中所说的掩码是右下角对齐