如何抓取XHR自动加载页面?Selenium入门实操指引
使用Selenium抓取滚动加载页面的卡片链接
步骤1:准备环境
首先安装Selenium库,并下载对应浏览器的驱动(以Chrome为例):
pip install selenium
下载与你的Chrome版本匹配的ChromeDriver,将其放置在系统PATH路径下,或者在初始化浏览器时指定驱动路径。
步骤2:初始化浏览器并访问目标页面
启动浏览器,打开目标网站,同时添加基础反检测配置避免被识别为自动化工具:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time options = webdriver.ChromeOptions() options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) # 可选:添加用户代理模拟真实浏览器 options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36') driver = webdriver.Chrome(options=options) driver.get("https://moscow.chatnovosela.ru/novostroyki")
步骤3:模拟滚动加载全部内容
页面会在滚动到底部时触发新卡片加载,循环滚动直到没有新内容出现:
last_height = driver.execute_script("return document.body.scrollHeight") while True: # 滚动至当前页面底部 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 等待新内容加载(可根据页面实际加载速度调整时间,或用显式等待替代固定sleep) time.sleep(2) # 获取更新后的页面高度 new_height = driver.execute_script("return document.body.scrollHeight") # 若高度不再变化,说明所有内容已加载完成 if new_height == last_height: break last_height = new_height
提示:如果页面加载不稳定,可替换固定sleep为显式等待,比如等待新的卡片元素出现,提升脚本效率。
步骤4:提取所有卡片链接
滚动完成后,定位卡片链接元素并提取href属性:
# 等待所有卡片链接加载完成(需根据页面实际HTML结构调整CSS选择器) wait = WebDriverWait(driver, 10) card_links = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".post-item a"))) # 提取所有链接 all_card_links = [link.get_attribute("href") for link in card_links] # 输出或保存结果 for link in all_card_links: print(link)
注意:CSS选择器需要根据页面实际结构调整——打开浏览器开发者工具,查看卡片链接的HTML层级,比如若卡片容器class为post-item,内部链接是<a>标签,则用.post-item a作为选择器。
步骤5:清理资源
完成抓取后关闭浏览器,释放资源:
driver.quit()
关键注意事项
- 选择器适配:务必根据目标页面的真实HTML结构调整元素定位方式(CSS选择器或XPath),否则无法正确提取链接。
- 反爬应对:若网站检测严格,可尝试添加更多浏览器配置(如禁用图片加载、设置随机等待间隔)降低被拦截概率。
- 异常处理:建议添加
try-except块处理加载超时、元素未找到等异常,提升脚本稳定性。
内容的提问来源于stack exchange,提问作者tuf9k
相关产品推荐
相关产品推荐

