You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Selenium获取kw.com站点全部代理元素?

解决KW代理列表爬取不全的问题

问题核心原因

你的代码存在两个关键缺陷:

  • 固定滚动到200000像素位置,无法适配页面加载新内容后的高度变化,导致部分内容未触发加载
  • 固定循环50次,要么次数不足漏加载,要么次数过多做无用功

优化后的代码方案

import time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager

if __name__ == '__main__':
    print("Checking Browser driver...")
    options = Options()
    # options.add_argument('--headless')
    options.add_argument("start-maximized")
    options.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 1})    
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('excludeSwitches', ['enable-logging'])
    options.add_experimental_option('useAutomationExtension', False)
    options.add_argument('--disable-blink-features=AutomationControlled')
    srv = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=srv, options=options)    
    waitWD = WebDriverWait(driver, 10)         
    
    link = "https://www.kw.com/agent/search/CA/San%20Diego" 
    driver.get(link)   
    
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        # 滚动到当前页面最底部,触发新内容加载
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
        # 等待内容加载,可根据实际速度调整时长
        time.sleep(2)
        # 获取更新后的页面高度
        new_height = driver.execute_script("return document.body.scrollHeight")
        # 高度不再变化时,说明已加载全部内容
        if new_height == last_height:
            break
        last_height = new_height
        print(f"Loaded more content, current page height: {new_height}")
    
    soup = BeautifulSoup(driver.page_source, 'html.parser')       
    tmpDIV = soup.find_all("div", {"class": "FindAgentRoute__row"})     
    print(f"{len(tmpDIV)} elements found")  
    input("Press!")
    driver.quit()

关键优化说明

  • 动态滚动到底部:用document.body.scrollHeight获取实时页面高度,确保每次滚动都触达当前页面底部,触发新内容加载
  • 自动终止循环:通过对比滚动前后的页面高度,自动判断是否还有新内容,无需固定循环次数
  • 精简等待逻辑:缩短基础等待时间,避免无效等待,提升爬取效率

额外优化建议

  • 若网站反爬严格,可替换固定sleep为随机等待:
    import random
    time.sleep(random.uniform(1.5, 3))
    
  • 用显式等待替代固定sleep,进一步提升可靠性:
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    # 替换原sleep代码块
    try:
        waitWD.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.FindAgentRoute__row:last-child")))
    except:
        pass
    

内容的提问来源于stack exchange,提问作者Rapid1898

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:58:19