Python Selenium爬虫For循环遍历异常致库存数据错位求助
问题说明
使用Python结合Selenium编写网页爬虫,抓取产品型号、价格及库存数据。因网站结构限制,需点击产品下方按钮弹出窗口,查看各仓库库存并求和得到总库存。目前遇到问题:首个商品库存计算正确,但第二个商品复用首个结果,后续约900个商品库存全部错位(第n个显示第n+1个的库存)。相关代码片段如下:
stock_list =[] stock_button=self.driver.find_elements(By.XPATH,'XYZ') ### - the xpath is to locate the button underneath each product (per the intro above) for i in stock_button: i.click() ### - this pops-up the stock pop-up window total_stock=0 each_stock_line = self.driver.find_elements(By.XPATH,stock_xpath) ### each line = warehouse for i in each_stock_line: total_stock=total_stock+int(i.get_attribute("innerHTML")) stock_list.append(total_stock) self.driver.find_element(By.XPATH,x_button).click() ### this is to close the pop-up window
代码缺陷分析
- 循环变量重名覆盖:外层循环用
i遍历按钮元素,内层循环又用i遍历库存行元素,直接覆盖了外层的i引用。当外层循环执行到第二次时,i已经变成内层循环的最后一个库存行元素,而非第二个按钮元素,导致后续点击操作完全错误,库存数据自然错位。 - 无等待机制引发的数据同步问题:点击按钮弹窗后直接查找库存元素,弹窗可能还未加载完成,此时获取的仍是上一次弹窗的库存数据;关闭弹窗后立即点击下一个按钮,页面未恢复稳定,也会导致元素定位错误。
- 元素定位稳定性不足:关闭弹窗时用
find_element直接定位,若页面存在多个匹配该XPath的元素,可能误点其他元素;库存元素的XPath若未限定在弹窗范围内,也可能抓取到页面上的无关数据。
修复后的代码示例
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC stock_list = [] # 变量名改为复数,避免语义歧义 stock_buttons = self.driver.find_elements(By.XPATH, 'XYZ') # 外层循环变量替换为btn,避免与内层冲突 for btn in stock_buttons: btn.click() # 等待弹窗内的库存元素加载完成 WebDriverWait(self.driver, 10).until( EC.presence_of_all_elements_located((By.XPATH, stock_xpath)) ) total_stock = 0 each_stock_line = self.driver.find_elements(By.XPATH, stock_xpath) # 内层循环变量改为stock_item,避免覆盖外层 for stock_item in each_stock_line: # 去除字符串首尾空白,避免转换整数报错 stock_num = stock_item.get_attribute("innerHTML").strip() total_stock += int(stock_num) stock_list.append(total_stock) # 等待关闭按钮可点击后再操作 close_btn = WebDriverWait(self.driver, 10).until( EC.element_to_be_clickable((By.XPATH, x_button)) ) close_btn.click() # 等待弹窗完全消失,确保页面状态稳定后再处理下一个商品 WebDriverWait(self.driver, 10).until( EC.invisibility_of_element_located((By.XPATH, stock_xpath)) )
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

