Python Selenium遍历li重复、无顺序匹配姓名点击复选框问题求解
Selenium动态考勤列表匹配问题
初始异常现象
使用Selenium开发考勤自动化脚本,预期功能为读取页面展示的人员姓名,匹配到目标姓名后点击对应复选框。脚本运行时出现异常:反复点击第一个复选框,排查后确认逻辑仅会重复读取第一个<li>元素的内容。
页面对应基础HTML结构如下:
<div class="members"> <ul class="memberlist"></ul> </div>
页面中的<li>列表项是通过fetch API从数据库拉取数据后动态渲染生成的,最初编写的两段测试代码运行后,均只会重复输出第一个<li>元素的内容:
for i in range(len(df)): print(driver.find_element(By.XPATH,".//ul[@class='memberlist']/li/p").text) for i in range(len(df)): print(driver.find_element(By.CLASS_NAME,"name").text)
此前尝试参考同类问题的排查方案,未找到正确的修正语法。
阶段性调整后的待解决问题
调整元素定位逻辑后,已经可以正常读取所有列表内的人员姓名,当时编写的姓名匹配+复选框点击代码如下:
for i in range(len(df)): # 匹配表格姓名与网页中class为name的元素文本 if df['name'][i]==driver.find_elements(By.CLASS_NAME,"name")[i].text: driver.find_elements(By.CLASS_NAME, week)[i].click() print(driver.find_elements(By.CLASS_NAME,"name")[i].text) else: print('No match')
上述代码存在明显缺陷:强依赖Excel考勤表的姓名顺序与网页列表渲染顺序完全一致,只要两边顺序出现错位就会匹配失败,输出No match。需要实现不依赖列表顺序的匹配逻辑:遍历每个待考勤姓名时可在全页面范围搜索匹配,匹配成功后点击对应人员的复选框。
内容的提问来源于stack exchange,提问作者Ray M
相关产品推荐
相关产品推荐

