Python使用Selenium爬取商品列表翻页时报TimeoutException如何解决
问题解决方案
1. 翻页抛出TimeoutException的解决
错误原因
- 你使用固定下标
a[{}]定位页码,当页码≥3时,分页栏会出现「上一页」按钮,原有页码对应的a标签下标会往后偏移,导致路径匹配不到对应元素 - 注释中CSS选择器的类名拼写错误:正确类名为
number_wrap,你写的number_warp多了个字母 - 固定5秒的等待时长可能受网络波动影响,不足以完成页面加载
修复方案
将翻页的定位逻辑替换为文本匹配的方式,不受分页栏其他按钮的影响:
# 替换原来的翻页代码 WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '//div[contains(@class,"number_wrap")]/a[text()="{}"]'.format(cur_page)))).click()
2. 获取图片抛出IndexError的解决
错误原因
- 不是所有商品列表li标签都存在
a.thumb_link > img结构,部分广告块、异常商品的结构和正常商品不一致,select()方法匹配不到元素就会返回空列表,直接取[0]就会触发索引越界 - 该站点使用图片懒加载,初始加载时img标签的
src属性可能是占位图,真实地址存在data-src属性中
修复方案
先判断匹配结果是否非空,再取值,同时兼容懒加载属性:
# 替换原来注释的图片获取代码 img_tags = v.select('a.thumb_link > img') if img_tags: img_url = img_tags[0].get('data-src', img_tags[0].get('src', '')).strip() print(img_url)
内容的提问来源于stack exchange,提问作者박성은
相关产品推荐
相关产品推荐

