微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Selenium 获取一组元素然后循环点击

1.需求:循环点击首页6个tag

 

 2.找到一组元素相同点

 

 3.实现

 1 # -*- coding:utf-8 -*
 2 import time
 3 from selenium import webdriver
 4 
 5 driver = webdriver.Chrome()
 6 driver.get('http://www.huya.com')
 7 
 8 """
 9 方法1 Failed
10 提前获取元素,循环元素,页面出现刷新,已获取元素失效,会报错提示找不到元素(即使元素不变)
11 """
12  item = driver.find_elements_by_class_name('hy-nav-item')
13  for i in range(len(item)):
14      item[i].click()
15      print(f'{i}:\t{item[i]}')
16      driver.implicitly_wait(5)
17      item = driver.find_elements_by_xpath('//*[@id="duya-header"]/div/div/div[1]/div[i+1]')
18 """
19 方法2 
20 获取一组元素的长度,循环个数,每次循环都重新获取元素,防止失效(当页面刷新元素失效/改变可尝试此方法)
21 
22 """
23 # 获取一组元素的长度
24 counts = len(driver.find_elements_by_class_name('hy-nav-item'))
25 # 循环个数,range函数从0递增
26 for i in range(counts):
27     # 每次循环,都重新获取元素,防止元素失效或者页面刷新后元素改变了
28     item = driver.find_elements_by_xpath('//*[@id="duya-header"]/div/div/div[1]/div')
29     # 循环点击获取的元素
30     item[i].click()
31     # 打印每次获取元素,调试用
32     print(f'{i}:\t{item[i]}')
33     # 隐式等待,避免页面加载慢获取元素失败导致点击失效
34     driver.implicitly_wait(5)

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐