[英]Selenium Find Elements by Class Name Bug (Python)
上下文:如果该代码块与查询具有相同的名称,则应该单击 web 元素,否则单击第一个 web 元素。
问题:如果排除了 else 块,它工作得很好。 否则,它只是默认为 else 块中的条件(然后在浏览器关闭后抛出一个陈旧的元素异常,即使它已经点击了元素??? )
可重现:当然,如果需要,这里是文件https://github.com/The-Fag-Fajitas/Anime_Manager/blob/main/Back%20End/animemanager.py 。
注意:此代码之前的任何内容都可以正常工作。
注意 2:此代码的目的是检查任何相似的名称(即 x season 4 而不是 x or x season 1 )
# Only searches for the first 5 results
an_list = dv.find_elements_by_class_name(desired_website.anime)[:5]
for an in an_list:
# Waits for the DOM to load (an implicit wait was already added).
time.sleep(15)
if an.text.lower() == query.lower():
an.click()
else:
an_list[0].click()
我认为正在发生的事情是你得到了一个改变页面/dom的点击。 这会使 an_list 中的所有内容都成为陈旧的元素。
因此,您要么需要单击新的 window(大量的 SO 链接来展示如何执行此操作),要么在单击要单击的内容时跳出 for 循环。
# Only searches for the first 5 results
an_list = dv.find_elements_by_class_name(desired_website.anime)[:5]
count=0;
while (count<len(an_list)):
# Waits for the DOM to load (an implicit wait was already added).
an = an_list[count]
count = count+1;
an_list = dv.find_elements_by_class_name(desired_website.anime)[:5]
time.sleep(15)
if an.text.lower() == query.lower():
an.click()
else:
an_list[0].click()
重新找到 an_list,因为单击元素会更改 DOM 引用
在把我的头撞在墙上两周后,它终于奏效了。 问题是,我不知道它是如何工作的。 出于某种原因,所有过时的元素引用突然消失了,它工作得很好。 事实上,我找到了两种解决方案。
解决方案1:
an_list = dv.find_elements_by_class_name(desired_website.anime)
for an in an_list:
if an.text.lower() == query.lower():
an.click()
an_list[0].click()
解决方案2:
an_list = dv.find_elements_by_class_name(desired_website.anime)
for an in an_list:
if an.text.lower() == query.lower():
an.click()
break
else:
an_list[0].click()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.