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

使用Selenium爬取广告Banner链接遇阻,求解决方案

解决广告Banner链接抓取问题的方案

一、修复现有Selenium代码的问题

你的代码存在两个核心问题:绝对XPATH稳定性差和未正确获取链接属性,可通过以下方式解决:

1. 抛弃绝对XPATH,改用特征化相对定位

广告Banner通常有通用识别特征,比如:

  • 包含ad/banner关键词的class名(如ad-banner、adv-container)
  • 链接属性target="_blank"(广告多设置为新开窗口)
  • 外链地址(href以http开头,非站内域名)
  • 特定广告标识属性(如data-ad-type、data-ad-id)

用这些特征组合定位,比依赖页面结构的绝对XPATH稳定得多。针对Yandex的广告,可尝试:

  • CSS选择器:div[class*="adv"] a
  • XPATH://a[@target="_blank" and contains(@class, "banner")]

2. 正确提取广告链接

你当前代码打印的是element.text(元素显示文本),广告实际链接需要通过get_attribute('href')获取。

修改后的示例代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'

chrome_options = Options()
chrome_options.add_argument(f'user-agent={user_agent}')
# 可选:启用无头模式,避免弹出浏览器窗口
chrome_options.add_argument('--headless=new')

driver = webdriver.Chrome(options=chrome_options)

try:
    driver.get('https://yandex.com/')
    # 等待所有符合广告特征的链接加载完成
    ad_links = WebDriverWait(driver, 30).until(
        EC.presence_of_all_elements_located(
            (By.XPATH, '//a[@target="_blank" and starts-with(@href, "http")]')
        )
    )
    for idx, link in enumerate(ad_links, 1):
        href = link.get_attribute('href')
        text = link.text.strip()
        print(f"广告{idx}: 文本={text},链接={href}")
except TimeoutException:
    print("超时未检测到广告元素")
finally:
    driver.quit()

二、替代Selenium的工具选择

如果觉得Selenium操作繁琐,这些工具更适配动态内容抓取:

  • Playwright:现代无头浏览器工具,API简洁,自动处理元素等待,支持多浏览器(Chrome/Firefox/Safari),对动态渲染广告兼容性更好。
  • Pyppeteer:Python版Puppeteer(Chrome官方工具),专注Chrome内核,适合快速抓取JS加载的内容,语法轻量化。
  • Requests + BeautifulSoup:仅适用于静态渲染的广告(页面初始HTML已包含广告链接),若广告是JS动态加载则无法抓取。

关键注意事项

不同网站的广告结构差异较大,你需要:

  1. 用浏览器开发者工具(F12)观察广告元素的共性特征(class、属性、父容器)
  2. 针对不同网站调整定位规则,避免依赖单一特征
  3. 部分网站有反爬机制,需设置合理请求间隔、用户代理,必要时使用代理IP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:25:17