我编写了一个脚本,其中定义了一个“下一页”函数,该函数滚动到页面底部,识别“下一页”按钮,然后单击该按钮导航到下一页。请参阅我的脚本的以下摘录:
def next_page():
browser.execute_script("window.scrollTo(0,document.body.scrollHeight);")
sleep(1)
try:
next_button = browser.find_element(By.CLASS_NAME, 'bbsPager_next')
next_button.click()
except NoSuchElementException:
print("Next button not found. End of pagination or element not loaded yet.")
return False
return True
稍后在我的脚本中,我将此函数作为 while True 循环的一部分调用,但它不断抛出 NoSuchElement 异常。奇怪的是我知道该元素存在,事实上,当我手动调用 next_page() 函数时,我能够成功导航到下一页。所以我知道该功能有效。我只是不明白为什么它在集成为整个脚本的一部分时不起作用。
我的总体目标是使用 Python Selenium 创建一个网络抓取工具,从目标网站的当前页面提取相关数据字段,然后自动导航到下一页并重复相同的过程,直到从所有可用页面提取数据。如上所述,我遇到的问题是,由于执行 next_page() 函数时引发 NoSuchElement 异常,我的“while True”循环不断中断。以下是我所指的 while True 循环的摘录:
while True:
extract_page_data()
navigation_successful = next_page()
if not navigation_successful:
print('No more pages left. Exiting...')
break
我希望它从页面中提取数据,导航下一页并再次重复该过程,直到没有更多页面为止。但是,我收到的输出如下:
“未找到下一步按钮。分页结束或元素尚未加载。 没有更多的页面了。退出...”
任何帮助将不胜感激!谢谢!!
我需要查看脚本的其余部分来确定地诊断问题,因为你说手动运行该函数是有效的。
但是,我可以预见的一个潜在问题是,当您在
while True
循环中运行该元素时,该元素可能不一定会加载并变得可点击。尝试像这样修改你的函数:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def next_page(browser):
# Scroll to bottom of page in order for 'Next' button to be visible
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
sleep(1)
try:
# Wait for the 'Next' button to be clickable
next_button = WebDriverWait(browser, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, 'bbsPager_next'))
)
next_button.click()
return True
except NoSuchElementException as e:
print(f"Next button not found. End of pagination or element not loaded yet. Details: {e}")
return False
except Exception as e:
print(f"Unknown exception occured: {e}")
return False