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

Python Selenium爬虫条件判断失效问题求助

解决LinkedIn爬虫元素判断崩溃问题(无需try...catch)

核心问题出在你用的find_element()方法——找不到元素时它会直接抛出NoSuchElementException,三元表达式里的判断逻辑根本没机会执行,这就是代码崩溃的原因。

下面是两种无需try...catch的可行方案:

方案1:直接用find_elements()替代find_element()

find_elements()(注意复数形式)找不到元素时会返回空列表,而非抛出异常,刚好适配你的三元表达式需求:

from selenium.webdriver.common.by import By

# 提取帖子图片链接(存在则取src,不存在为空)
post_image = driver.find_elements(By.CSS_SELECTOR, "img.post-content-image")[0].get_attribute("src") if driver.find_elements(By.CSS_SELECTOR, "img.post-content-image") else ""

# 提取帖子视频链接(逻辑同上)
post_video = driver.find_elements(By.CSS_SELECTOR, "video.post-video source")[0].get_attribute("src") if driver.find_elements(By.CSS_SELECTOR, "video.post-video source") else ""

注:请根据实际页面的CSS选择器替换示例中的img.post-content-image和video.post-video source。

方案2:封装通用工具函数(简化重复代码)

如果需要多次判断不同元素,封装一个工具函数能让代码更简洁:

from selenium.webdriver.common.by import By

def get_element_attr(driver, locator_type, locator, attr, default=""):
    elements = driver.find_elements(locator_type, locator)
    return elements[0].get_attribute(attr) if elements else default

# 调用示例
post_image = get_element_attr(driver, By.CSS_SELECTOR, "img.post-content-image", "src")
post_video = get_element_attr(driver, By.CSS_SELECTOR, "video.post-video source", "src")

对应你提到的JavaScript实现思路

JS版Selenium的逻辑完全一致,也是利用findElements()(复数)返回空数组的特性:

// 提取图片链接
let postImage = driver.findElements(By.css("img.post-content-image"))
  .then(els => els.length ? els[0].getAttribute("src") : "");

// 提取视频链接
let postVideo = driver.findElements(By.css("video.post-video source"))
  .then(els => els.length ? els[0].getAttribute("src") : "");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:40:37