如何在Python中循环使用CSS选择器遍历45个列表?
解决Python Selenium循环处理45个列表项的问题
你的思路是对的,只需要用循环遍历1到45的索引,替换CSS选择器里的固定序号即可。原代码里有重复的点击操作,还缺少元素加载等待的逻辑,我帮你修正并优化了代码:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 循环处理1到45号列表项(CSS的:nth-child从1开始计数) for i in range(1, 46): # 等待目标链接可点击,避免页面加载慢导致报错 target_link = WebDriverWait(browser, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, f"ul.list_basis li.dragons:nth-child({i}) .dragonchild a.link")) ) target_link.click() # 切换到新打开的窗口 browser.switch_to.window(browser.window_handles[1]) # 等待列表元素加载完成 items = WebDriverWait(browser, 10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.classname11')) ) # 提取每个item的名称和编号信息 for item in items: name = item.find_element(By.CSS_SELECTOR, '.classname12 > .classname13').text number = item.find_element(By.CSS_SELECTOR, '.classname14').text print([name, number]) # 关闭当前窗口,切回原页面窗口 browser.close() browser.switch_to.window(browser.window_handles[0])
关键修改说明:
- 移除了原代码中重复的
li.dragons:nth-child(1)点击操作,只保留带{i}的动态选择器,避免重复打开窗口 - 添加了显式等待(WebDriverWait),替代直接查找元素的写法,防止页面未加载完成时出现
NoSuchElementException错误,让代码更稳定 - 改用
By.CSS_SELECTOR的方式调用元素查找方法,这是Selenium 3.x及以上版本推荐的规范写法
内容的提问来源于stack exchange,提问作者Wowmoment
相关产品推荐
相关产品推荐

