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
相关产品推荐
相关产品推荐

