Python For循环只运行一次。我需要在selenium web驱动程序中运行多达42次
我正在尝试使用for循环获取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
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()