请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

定位"前端工具"时报错 IndexError: list index out of range,请问如何解决?

**#2020年3月9日执行下面代码(perform后与老师定位“前端工具”的代码相同)但报错了:**

driver = webdriver.Chrome()
maxwindow = driver.maximize_window()
driver.get('https://www.imooc.com/')
time.sleep(5)  
driver.find_element_by_class_name('redrain-closeBtn').click()
time.sleep(5)  
element = driver.find_element_by_class_name('menuContent').find_elements_by_class_name('item')[1]
ActionChains(driver).move_to_element(element).perform()
time.sleep(5)
driver.find_elements_by_class_name('tag_box')[1].find_element_by_link_text('CSS').click()
time.sleep(3)

#报错如下:
driver.find_elements_by_class_name(‘tag_box’)[1].find_element_by_link_text(‘前端工具’).click()
IndexError: list index out of range

正在回答 回答被采纳积分+3

1回答

Mushishi 2020-03-09 11:17:51

driver.find_elements_by_class_name(‘tag_box’)[1].find_element_by_link_text(‘前端工具’).click()

findelements 找的是一个list,但是这个list里面你有多少个元素呢?现在你传递1,说没有。说明只找到一个元素。可以现driver.find_elements_by_class_name(‘tag_box’)[1] 把他的len 打印出来,看一下多少个。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕前端3486152 #1
    谢谢老师的回复!
    1)我按照您说的方式打印后还是报错:print(len(driver.find_elements_by_class_name('tag_box')[1]))
    IndexError: list index out of range
    但我用document查时发现实际有10个tag_box元素:document.getElementsByClassName("tag-box"),发现下面有10个该名称的元素。只有使用document.getElementsByClassName("tag-box")[1]才能获取我要定位的父节点元素的list
    2)如果我用driver.find_element_by_class_name('tag_box')运行时会报错selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"class name","selector":"tag_box"}
    3)我直接用xpath和link_text也能定位"前端工具"元素,但我不理解为什么用老师说的父子节点方式用ClassName定位时会报错。请老师帮忙看下,谢谢您!
    回复 有任何疑惑可以回复我~ 2020-03-10 07:56:25
  • Mushishi 回复 提问者 慕前端3486152 #2
    print(len(driver.find_elements_by_class_name('tag_box'))) 打印这个,看个数。肯定只有一个。至于为什么只有一个你需要打开页面后看一下你源码显示没有
    2、driver.find_element_by_class_name('tag_box')  既然告诉你没有元素,说明你这个页面要么没加载出来,要么所有元素不可显示。
    3、你driver是定位集父节点是哪里呢?
    回复 有任何疑惑可以回复我~ 2020-03-11 21:12:39
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信