selenium节点(元素)遍历的疑惑

一、节点遍历是什么

例如:
在这里插入图片描述
由于裁判文书网只显示前600个,我的思路就是通过关键词的限定实现内容在600条以内,因而完整的下载需要进行关键词的遍历
html:
在这里插入图片描述

二、问题

直接进行遍历会报错,原因不明
如:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

browser = webdriver.Firefox()

"""网页获取"""
browser.get('http://wenshu.court.gov.cn/website/wenshu/181217BMTKHNT2W0/index.html?pageId=0a8bea45ec529d8391dd57f1a421ae4e&s21=%E8%AE%A4%E7%BD%AA%E8%AE%A4%E7%BD%9A')
wait = WebDriverWait(browser,20)
"""进行内部遍历获取,通过关键字进行限定"""
for number in range(1,35):
	keywords = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="j3_%d_anchor"]'%number)))
	print(keywords)
	keywords.click()
	time.sleep(1)
	button = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@class="LT_Filter_right clearfix"]/p[2]/i['
                                                              '@class="fa fa-close"]')))

	keywords.click()

每次都是第一个元素可以点击,但是接下来遍历的第二个元素都会报错,timeout,即超时
不是%d不能传入,因为第一个可以传入

三、解决方法

问题产生原因不明,解决原因也不明
思路,既然每次第二个元素超时,那就关闭浏览器,使得每次只点击的第一个元素;即点击一个元素关闭一次浏览器,然后重启浏览器。这样就需要每次启动浏览器传入需要遍历的值

def selenium(number):
"""尝试遍历"""
print()
browser = webdriver.Firefox()

"""网页获取"""
browser.get('http://wenshu.court.gov.cn/website/wenshu/181217BMTKHNT2W0/index.html?pageId=0a8bea45ec529d8391dd57f1a421ae4e&s21=%E8%AE%A4%E7%BD%AA%E8%AE%A4%E7%BD%9A')
wait = WebDriverWait(browser,20)
"""进行内部遍历获取,通过关键字进行限定"""

keywords = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="j3_%d_anchor"]'%number)))
print(keywords)
keywords.click()
time.sleep(1)
browser.close()
for number in range(1,10):
	selenium(number)	

四、结语

问题虽然解决了,但是原理不明,并不是xpath语法不对,问题在于为什么浏览器只能点击第一个元素,清除后再次点击就会超时??????

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值