selenium Python中的“For”循环对同一个元素迭代两次-最欢迎提供帮助

fzsnzjdm  于 2023-01-02  发布在  Python
关注(0)|答案(1)|浏览(148)

本质上,我已经在Python上创建了一个非常基本的scraping代码(使用Selenium),其主要思想是从网站获取数据,关键数据是(i)产品的型号名称(ii)它们的价格和(iii)股票。
由于网站的构建方式,检索库存信息的唯一方法是点击特定产品下方的按钮,该按钮会生成一个小弹出窗口,然后信息会显示在多行中,每行代表一个特定的仓库。
所有这些冗长的介绍都是为了以防万一,它们作为背景知识会有所帮助,但实际问题如下:不管出于什么原因,当我遍历每一行时(即仓库),将结果相加(因此,无论库存在何处,我都有一个反映总库存的单一数字),它将正确计算“项目1”的总库存,然后它将使用我为“项目1”获得的结果,并将其用于“项目2”以及(这就是问题所在),然后继续正确计算所有后续项目的库存数据(共约900个),但每个项目都需要调整一个位置(由于项目2的结果不正确)-即“项目2”的库存将显示为“项目3”......“项目3”的库存将显示为“项目4”等......
下面是我使用的代码(这可能是完全错误的,但它已经工作了几个月,直到昨天...)
感谢这可能是diffuclt帮助没有看到网站的代码/结构的其余部分,但我仍然会非常感激,如果有人可以善意地指出,如果我错过了一些非常明显的或代码片段是根本性的缺陷.
任何帮助都是最受欢迎的!

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
hmtdttj4

hmtdttj41#

在没有看到实际网站的情况下很难确定,但很有可能您看到的是您所看到的,因为网站正在运行JavaScript代码以填充单击时的弹出窗口,您需要添加一些等待命令,直到JavaScript完成HTML更新,然后才开始检索数据。
如果是这样的话,网站也有可能有一个API,而不是用Selenium抓取网站的HTML,它可能会更容易抓取底层的API。

相关问题