Python For循环只运行一次。我需要在selenium web驱动程序中运行多达42次

Python For循环只运行一次。我需要在selenium web驱动程序中运行多达42次,python,selenium-chromedriver,nested-loops,Python,Selenium Chromedriver,Nested Loops,我正在尝试使用for循环获取web表数据。该表的页码最多为42页。这是我的代码: driver.get() #identification and Locators stack = driver.find_elements_by_xpath("//*[@id='container']/div/div[4]/table/tbody/tr/td[10]/div/ul/li") quant = driver.find_elements_by_xpath("//*[@cla

我正在尝试使用for循环获取web表数据。该表的页码最多为42页。这是我的代码:

driver.get()
#identification and Locators
stack = driver.find_elements_by_xpath("//*[@id='container']/div/div[4]/table/tbody/tr/td[10]/div/ul/li")
quant = driver.find_elements_by_xpath("//*[@class='admin__data-grid-wrap']/table/tbody/tr/td[7]/div")
link = driver.find_elements_by_xpath("//*[@class='admin__data-grid-wrap']/table/tbody/tr/td[15]/a")
#Start a procedure
for i in driver.find_elements_by_xpath("//*[@id='container']/div/div[2]/div[2]/div[2]/div/div[2]/div/div[2]/button[2]"):
    for steck,quanty,links in zip(stack,quant,link):
        stuck = steck.text
        quantity = quanty.text
        linkes = links.get_attribute("href")
        if stuck != 'No manage stock':
            word = "Default Stock: "
            stock = stuck.replace(word, '')
            stocks = int(stock)
            quanties = int(float(quantity))
            if stocks < 0:
                print(stocks,quanties,linkes)
                stacks = abs(stocks)
                total = stacks+quanties+1
                print(total)
    i.click()
    driver.implicitly_wait(10)
    print("Next Page")
driver.get()
#识别和定位器
stack=driver。通过xpath(“/*[@id='container']/div/div[4]/table/tbody/tr/td[10]/div/ul/li”)查找元素
quant=driver.find_elements_by_xpath(“/*[@class='admin_udata-grid-wrap']/table/tbody/tr/td[7]/div”)
link=driver.find_elements_by_xpath(“/*[@class='admin_udata-grid-wrap']/table/tbody/tr/td[15]/a”)
#开刀
对于驱动程序中的i。通过xpath(“/*[@id='container']/div/div[2]/div[2]/div[2]/div/div[2]/div/div[2]/div/div[2]/按钮[2]”查找元素:
对于steck、quantity、zip中的链接(stack、quant、link):
卡住=steck.text
数量=数量。文本
linkes=links.get_属性(“href”)
如果卡住了!='没有“管理库存”:
word=“默认库存:”
库存=卡住。更换(单词“”)
股票=整数(股票)
数量=整数(浮动(数量))
如果库存<0:
打印(库存、数量、链接)
堆栈=绝对值(存量)
总计=堆栈+数量+1
打印(总计)
i、 单击()
驱动程序。隐式等待(10)
打印(“下一页”)

此代码从第一页获取数据。单击下一页后。第二个for循环没有从web表获取第二页数据。

很可能是您的查询
驱动程序。通过xpath(“/*[@id='container']/div/div[2]/div[2]/div[2]/div/div[2]/div/div[2]/button[2]”查找元素。
只返回一个元素(转到下一页的实际按钮)因此,我想您应该读取页码并将其用于外部循环(或者至少,您可能必须重新绑定表示可单击按钮的HTML元素上的选择,因为在加载表的新页面时,它可能会更改):

如果无法读取页数,也可以使用
while
循环,在找不到按钮加载下一页时退出循环,如下所示:

while True:
    i = driver.find_elements_by_xpath(
        "//*[@id='container']/div/div[2]/div[2]/div[2]"
        "/div/div[2]/div/div[2]/button[2]")
    if not i:
        break
    i = i[0]
    # the rest of your logic
    # ...

    i.click()

这只是一个猜测(因为我们没有您尝试使用的页面/表格结构的示例HTML代码)。

您能发布我们可以复制的代码吗?我们不知道你在爬行什么,也不知道find_元素的结果是什么。我可以给你一个代码,但我不能给出URL。请重新检查我编辑的问题。谢谢你的逻辑。我几乎掌握了使工作自动化的逻辑。请看这张图片。没有办法阅读网页。当第二个循环运行时,
stack=steck.text
这一行通过错误selenium.common.exceptions.StaleElementReferenceException:Message:stale element reference:element未附加到页面文档
while True:
    i = driver.find_elements_by_xpath(
        "//*[@id='container']/div/div[2]/div[2]/div[2]"
        "/div/div[2]/div/div[2]/button[2]")
    if not i:
        break
    i = i[0]
    # the rest of your logic
    # ...

    i.click()