Click()后Selenium无法获取新页面page_source问题求助
解决方案:Tripadvisor翻页后page_source未更新的问题
问题核心是点击下一页后,页面采用异步加载新内容,但你立刻获取page_source时,新内容还没完成渲染,导致拿到的还是第一页的DOM数据。以下是具体解决方法:
关键修复步骤
点击翻页按钮后,必须等待页面内容完成更新,不能直接立即获取源码。可以通过两种可靠的等待方式实现:
方式1:等待页码元素更新
记录当前页码,等待新页面的页码与原页码不同,确认页面切换完成:
# 第一循环结束后,先记录当前页码 current_page = s_city.find(class_="pageNum current")["data-page-number"] # 点击下一页 python_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.nav.next.rndBtn.ui_button.primary.taLnk[data-page-number][onclick*='STANDARD_PAGINATION']"))) python_button.click() # 等待页码更新,确保新页面加载完成 WebDriverWait(driver, 20).until( lambda d: d.find_element(By.CSS_SELECTOR, "span.pageNum.current").get_attribute("data-page-number") != current_page ) # 现在获取新页面的源码 s_city = BeautifulSoup(driver.page_source, "lxml") results = s_city.find(class_="YtrWs") restaurants = results.find_all("a", class_="Lwqic Cj b") page_number = s_city.find(class_="pageNum current")["data-page-number"] print(page_number)
方式2:等待餐厅列表内容更新
记录上一页第一个餐厅的链接,等待新页面的第一个餐厅链接变化,确认列表已刷新:
# 第一循环结束后,记录上一页第一个餐厅的链接 first_restaurant_href = restaurants[0]['href'] if restaurants else "" # 点击下一页 python_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.nav.next.rndBtn.ui_button.primary.taLnk[data-page-number][onclick*='STANDARD_PAGINATION']"))) python_button.click() # 等待餐厅列表更新 WebDriverWait(driver, 20).until( lambda d: BeautifulSoup(d.page_source, "lxml").find(class_="YtrWs").find_all("a", class_="Lwqic Cj b")[0]['href'] != first_restaurant_href ) # 后续获取源码和数据的代码同上 s_city = BeautifulSoup(driver.page_source, "lxml") # ... 其余代码不变
注意事项
- 不要依赖URL变化判断页面切换:Tripadvisor翻页采用AJAX异步加载,URL不会更新,这种判断方式无效。
- 选择器需匹配当前页面:如果Tripadvisor更新了页面class名称,要及时调整CSS选择器或BeautifulSoup的查找条件。
- 延长等待时间:如果网络较慢,可将
WebDriverWait的超时时间从20秒适当延长,避免超时错误。
内容的提问来源于stack exchange,提问作者peetman
相关产品推荐
相关产品推荐

