如何使用Python Selenium滚动Facebook Meta广告库内部页面?
解决Facebook Meta广告库内部页面滚动问题
针对你找不到正确滚动容器的问题,以下是几种可行的解决方案:
方法1:定位稳定的滚动容器
Facebook的动态class经常更新,建议用更稳定的属性定位承载广告列表的滚动容器:
# 定位广告列表所在的滚动容器 scroll_container = driver.find_element(By.XPATH, '//div[@role="main"]//div[contains(@class, "x1yztbdb")]') # 执行滚动到底部的脚本 driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_container)
方法2:模拟循环滚动加载内容
如果直接设置scrollTop无效,可以模拟用户滚轮滚动,循环加载直到内容不再更新:
import time scroll_container = driver.find_element(By.XPATH, '//div[@role="main"]') last_height = driver.execute_script("return arguments[0].scrollHeight", scroll_container) while True: # 滚动到容器底部 driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_container) # 等待新内容加载 time.sleep(3) # 获取更新后的容器高度 new_height = driver.execute_script("return arguments[0].scrollHeight", scroll_container) # 高度不变则停止滚动 if new_height == last_height: break last_height = new_height
方法3:通过广告元素触发滚动
若仍定位不到容器,可通过定位最后一条广告,滚动到该元素位置来触发加载:
import time while True: # 定位所有广告元素 ads = driver.find_elements(By.XPATH, '//div[@data-ad-preview-id]') if not ads: break # 滚动到最后一条广告的位置 driver.execute_script("arguments[0].scrollIntoView({block: 'end'});", ads[-1]) time.sleep(2) # 检查是否有新广告加载 new_ads_count = len(driver.find_elements(By.XPATH, '//div[@data-ad-preview-id]')) if new_ads_count == len(ads): break
说明:Facebook的class为动态生成,会频繁变更,优先使用role、data-*这类稳定属性定位元素,避免依赖易变的class值。
内容的提问来源于stack exchange,提问作者Adnan Zafar
相关产品推荐
相关产品推荐

