Python Selenium实现Flickr图片下载时TimeoutException不生效问题
问题原因
- 使用的CSS选择器过于僵化:
#allsizes-photo > img:nth-child(1)仅匹配该容器下的第一个img子元素,部分页面中目标img是第二个子元素,自然无法匹配到元素。 - 你误以为TimeoutException未触发,实际上是异常分支仅写了
pass,没有任何日志提示,所以无法感知异常是否真的触发,程序会直接跳过当前链接继续执行。
修复方案
- 替换CSS选择器为更通用的规则,不需要限制img的序号,直接匹配
#allsizes-photo容器下的img元素即可:
webelement = WebDriverWait(driver,5).until(EC.presence_of_element_located((By.CSS_SELECTOR,'#allsizes-photo img')))
- 给TimeoutException分支增加日志输出,方便排查问题:
except TimeoutException as e: logging.debug(f"当前图片页加载超时,无法定位图片元素,跳过链接:{image_link}")
- 可选优化:给requests下载部分也增加异常捕获,避免网络波动导致程序中断:
for link in image_links: try: response = requests.get(link, timeout=10) response.raise_for_status() file_path = os.path.join(tag,os.path.basename(link)) with open(file_path, 'wb') as file: for chunk in response.iter_content(100000): file.write(chunk) except Exception as e: logging.debug(f"下载图片{link}失败:{str(e)}")
内容的提问来源于stack exchange,提问作者B3T0N
相关产品推荐
相关产品推荐

