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

如何加速使用Selenium爬取seetickets.us的效率?

提速解决方案

针对你遇到的隐式等待导致耗时剧增的问题,给你几个实用的优化方法:

1. 替换全局隐式等待为精准显式等待

隐式等待是全局生效的,所有元素查找都会触发等待,这是你耗时的核心原因。建议完全关闭隐式等待,只对必须等待出现的关键元素使用显式等待,并设置极短的超时时间(比如1秒)。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 先关闭全局隐式等待
driver.implicitly_wait(0)

# 仅对需要等待的元素使用显式等待,超时设为1秒
try:
    price_table = WebDriverWait(driver, 1).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "your-price-table-selector"))
    )
    # 处理价格表数据
except:
    # 无价格表时的逻辑
    pass

2. 用find_elements替代find_element(非关键元素)

对于那些不存在也不影响流程的元素,直接用find_elements(复数形式)查找。它找不到元素时会返回空列表,不会抛出异常,也不会触发任何等待,能立刻进入判断逻辑。

# 查找价格表,不存在则返回空列表
price_table = driver.find_elements(By.CSS_SELECTOR, "your-price-table-selector")
if price_table:
    # 有价格表时处理数据
    data = price_table[0].text
else:
    # 无价格表时的处理
    data = "无价格信息"

3. 优化页面加载策略

浏览器默认会加载所有资源(图片、视频等),这会浪费大量时间。可以设置页面加载策略为eager(只加载DOM结构),或者直接禁用图片加载:

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 设置页面加载策略为eager,仅加载DOM
chrome_options.page_load_strategy = 'eager'

# 禁用图片加载,进一步提速
prefs = {"profile.managed_default_content_settings.images": 2}
chrome_options.add_experimental_option("prefs", prefs)

driver = webdriver.Chrome(options=chrome_options)

4. 新标签页打开活动,避免页面跳转

不要每次爬完都返回列表页,直接在新标签页打开每个活动链接,处理完关闭标签页即可,节省页面跳转的时间:

# 在列表页获取所有活动链接
activity_links = [elem.get_attribute('href') for elem in driver.find_elements(By.CSS_SELECTOR, "activity-link-selector")]

for link in activity_links:
    # 打开新标签页
    driver.execute_script("window.open(arguments[0]);", link)
    # 切换到新标签页
    driver.switch_to.window(driver.window_handles[-1])
    
    # 爬取当前活动页面数据
    # ...(这里用上面的优化方法处理元素查找)
    
    # 关闭当前标签页
    driver.close()
    # 切回列表页标签页
    driver.switch_to.window(driver.window_handles[0])

5. 并行处理(可选)

如果单线程效率不够,可以用多线程/多进程同时处理多个活动页面。注意控制并发数(比如3-5个线程),避免触发网站反爬机制。

import threading

def crawl_activity(link):
    # 每个线程单独初始化浏览器实例(或用浏览器池)
    chrome_options = Options()
    chrome_options.page_load_strategy = 'eager'
    driver = webdriver.Chrome(options=chrome_options)
    driver.get(link)
    
    # 爬取数据逻辑
    # ...
    
    driver.quit()

# 启动多线程
activity_links = [elem.get_attribute('href') for elem in driver.find_elements(By.CSS_SELECTOR, "activity-link-selector")]
threads = []
for link in activity_links[:5]:  # 先测试5个并发
    t = threading.Thread(target=crawl_activity, args=(link,))
    threads.append(t)
    t.start()

for t in threads:
    t.join()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:06:25