我遇到了一个问题,在我用Selenium抓取多页之前,只需单击“下一页”按钮,然后使用NoSuchElementException
停止它。
但是我现在面对的url始终存在,在最后一页中,如果单击“下一页”按钮,它将重新加载当前页面。
任何人都可以帮助解决如何停止单击同一按钮吗?
items=driver.find_elements_by_class_name('item')
while True:
try:
#click next page
driver.find_element_by_link_text('下一页').click()
sleep(5)
#scrpae data here
items=driver.find_elements_by_class_name('item')
for i in range(0, len(items)):
results.append(items[i])
print(items[i])
except NoSuchElementException:
break
有关页面的详细信息,您可以查看下面的图片
答案 0 :(得分:2)
[已编辑]
您可以通过匹配下一页链接中的当前页面URL和下一页URL来解决此问题。 如果当前页面的URL与下一页链接中的URL相匹配,则为最后一页。否则继续报废。
您应该有一个用于存储当前页面URL的变量,并且当您按硒单击下一页链接时,您将获得页面URL并与上一个匹配。
这就是我的意思:
url = "https://humkinar.com.pk/"
driver.get(url)
items=driver.find_elements_by_class_name('item')
current_page_url = ""
prev_page_url = url
while True:
try:
driver.find_element_by_link_text('下一页').click()
current_page_url = driver.current_url
if current_page_url != prev_page_url:
time.sleep(5)
items=driver.find_elements_by_class_name('item')
for i in range(0, len(items)):
results.append(items[i])
print(items[i])
prev_page_url = current_page_url
else:
break
except NoSuchElementException:
break
答案 1 :(得分:1)
我在图片中看到的(我想您共享的图片是最后一页),请检查className == 'disable'
和<a class='disable'> <some text in chinese></a>
中的break;
更新:
items=driver.find_elements_by_class_name('item')
while True:
try:
#click next page
next = driver.find_element_by_link_text('下一页')
next.click()
sleep(5)
#scrpae data here
items=driver.find_elements_by_class_name('item')
for i in range(0, len(items)):
results.append(items[i])
print(items[i])
break;
if(next.getAttribute('class') == 'disable'){
throw new Exception()
}