使用Selenium/Safari/Python实现无限滚动爬取遇阻求助
Safari+Selenium滚动加载动态内容问题解决方案
以下是针对你遇到的滚动无效问题的针对性解决方法,结合Safari特性和博彩网站反爬逻辑:
分步滚动+高度判断
常规单次滚动可能被Safari渲染机制忽略,试试循环滚动并监听页面高度变化,确保内容加载完成:from selenium.webdriver.support.ui import WebDriverWait previous_height = driver.execute_script("return document.body.scrollHeight") # 按需循环,直到页面高度不再变化 while True: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 等待高度更新,超时时间按需调整 try: WebDriverWait(driver, 5).until( lambda d: d.execute_script("return document.body.scrollHeight") > previous_height ) previous_height = driver.execute_script("return document.body.scrollHeight") except: # 高度无变化,停止滚动 break模拟真实拖拽滚动
针对Safari对ActionChains的特殊支持,用鼠标拖拽页面的方式模拟用户操作,绕过反爬检测:from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By import time action = ActionChains(driver) # 点击并按住页面空白区域,向下拖拽 action.click_and_hold(driver.find_element(By.TAG_NAME, "body")) action.move_by_offset(0, 600) # 拖拽距离可根据页面调整 action.release().perform() time.sleep(2) # 等待动态内容加载手动触发滚动事件
部分网站会监听scroll事件而非仅检测滚动位置,滚动后手动触发事件确保网站感知:# 先滚动到页面底部 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 触发scroll事件 driver.execute_script(""" const scrollEvent = new CustomEvent('scroll', { bubbles: true, cancelable: true }); window.dispatchEvent(scrollEvent); """)检查Safari WebDriver配置
确保驱动配置正确,避免环境问题导致失效:from selenium import webdriver from selenium.webdriver.safari.options import Options safari_options = Options() safari_options.add_argument("--enable-javascript") safari_options.add_argument("--disable-web-security") # 部分网站需关闭跨域限制 driver = webdriver.Safari(options=safari_options)同时确认Safari已开启:开发菜单→允许远程自动化。
反爬绕过辅助操作
博彩网站反爬严格,可添加以下操作提升成功率:- 修改浏览器UA:
driver.execute_script(""" Object.defineProperty(navigator, 'userAgent', { value: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15', writable: false }); """) - 操作间添加随机等待:
import random import time time.sleep(random.uniform(1.5, 3.5))
- 修改浏览器UA:
内容的提问来源于stack exchange,提问作者ristourne la
相关产品推荐
相关产品推荐

