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

使用undetected chromedriver爬取9GAG表情包时遇TypeError问题求助

问题解决方法

一、修复Chrome驱动初始化错误

报错原因是你导入了Selenium的抽象Service类,这类无法直接实例化。调整驱动初始化逻辑即可解决:

修改后的初始化代码

from urllib import request
import os  # 补充原代码遗漏的os模块导入
import undetected_chromedriver as uc
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service  # 改用Chrome专用Service类
from webdriver_manager.chrome import ChromeDriverManager  # 用官方驱动管理工具

post = "az28zPm"
options = Options()
options.headless = True
# 添加无头模式必备参数,降低反爬检测概率
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-gpu")

url = f"https://9gag.com/gag/{post}"
# 正确初始化浏览器驱动
driver = uc.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get(url)

二、修复元素定位(适配9GAG页面结构变化)

原XPATH依赖页面绝对结构,容易失效,改用更稳定的CSS选择器:

替换后的资源定位代码

save_dir = f"Attachments/{post}"
if not os.path.isdir(save_dir):
    os.makedirs(save_dir)

try:
    # 用CSS选择器定位视频资源
    video_source = driver.find_element(By.CSS_SELECTOR, "article div.post-container video source")
    video_link = video_source.get_attribute("src")
    request.urlretrieve(video_link, f"{save_dir}/Meme.mp4")
except:
    # 优先获取图片的高清原图链接(9GAG用懒加载,data-src是原图)
    img_element = driver.find_element(By.CSS_SELECTOR, "article div.post-container picture img")
    image_link = img_element.get_attribute("data-src") or img_element.get_attribute("src")
    request.urlretrieve(image_link, f"{save_dir}/Meme.jpg")

driver.quit()  # 关闭驱动释放资源

三、更轻量的无浏览器实现思路

直接调用9GAG官方API,无需维护浏览器驱动,效率更高:

import requests
import os

post_id = "az28zPm"
api_url = f"https://9gag.com/v1/post/detail/{post_id}?skipNSFW=1"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

response = requests.get(api_url, headers=headers)
data = response.json()

save_dir = f"Attachments/{post_id}"
if not os.path.isdir(save_dir):
    os.makedirs(save_dir)

post_data = data["data"]["post"]
if post_data["type"] == "video":
    # 取720P高清视频链接
    video_url = post_data["images"]["image720mp4"]["url"]
    with open(f"{save_dir}/Meme.mp4", "wb") as f:
        f.write(requests.get(video_url, headers=headers).content)
else:
    # 取高清图片链接
    img_url = post_data["images"]["image700"]["url"]
    with open(f"{save_dir}/Meme.jpg", "wb") as f:
        f.write(requests.get(img_url, headers=headers).content)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:42:50