Python:迭代列表不断失败

时间:2017-11-20 16:11:18

标签: python function for-loop

我一直试图将以下内容计算两天;希望有人可以告诉我我做错了什么

我创建了一个函数,我希望在列表中遍历列表条目的次数

出于某种原因,我的FOR LOOP在第一次循环后失败了。我已经检查了创建的列表(“链接”)至少有2个条目,通过在列表上放置一个打印LEN,所以我不能为我的生活解决为什么只有一次通过循环退出

我添加了一个PRINT(“FOR LOOP STARTS”),所以我可以跟踪循环正在做什么,实际上在它失败之前它会再次显示文本但它从未显示下一个PRINT命令,它向我建议它在“VALUE = link.text”部分失败,但我再也不明白为什么

任何帮助都会非常感激

def MULTIHIT():

 try: 


      links = driver.find_elements_by_xpath(".//*[contains(@href, 'MyData=')]")

      for link in links:

           print("FOR LOOP STARTS")

           value = link.text
           print(value)

           driver.get('www.somewebsite.com')

           driver.find_element_by_name("searchValue").click()
           driver.find_element_by_name("searchValue").send_keys(value)

           driver.find_element_by_xpath(".//input[@name='sub']").click()

           #collect a value from an excel file and remove spaces
           cellvalue = str(sheet.cell(i, 1).value) 
           cellvalue2 = cellvalue.replace(" ", "")

           #collect a value from a webpage and remove spaces
           checkoff = driver.find_element_by_id("somedata")
           checkoff2 = checkoff.text.replace(" ", "")

           #if two values match, call another function
           if checkoff2 == cellvalue2:
                MAS()

 except:
      print("something went wrong")

编辑:

根据给出的建议,我以不隐藏错误的方式使用了我的TRY和EXCEPT。发布的错误是:

“消息:陈旧元素引用:元素未附加到页面文档.....”

我已经用Google搜索了这个,因为我理解错误被抛出,因为我已经离开了曾经存在元素的页面。但现在我想知道如何/为什么这可能.....我的印象是links = driver.find_elements_by_xpath(".//*[contains(@href, 'MyData=')]")创建一个名为LINKS的列表,并且FOR循环只是迭代一个静态和封闭的列表。

情况不是这样吗?

编辑2:

所以我认为find_elements创建的列表实际上只是指向driver以再次获取该元素。所以我做的是这个:

def MULTIHIT():

 try: 


      links = driver.find_elements_by_xpath(".//*[contains(@href, 'MyData=')]")
      links2 = []

      for link in links:
           links2.append(link.text)

      for link in links:

           print("FOR LOOP STARTS")

           value = link
           print(value)

           driver.get('www.somewebsite.com')

           driver.find_element_by_name("searchValue").click()
           driver.find_element_by_name("searchValue").send_keys(value)

           driver.find_element_by_xpath(".//input[@name='sub']").click()

           #collect a value from an excel file and remove spaces
           cellvalue = str(sheet.cell(i, 1).value) 
           cellvalue2 = cellvalue.replace(" ", "")

           #collect a value from a webpage and remove spaces
           checkoff = driver.find_element_by_id("somedata")
           checkoff2 = checkoff.text.replace(" ", "")

           #if two values match, call another function
           if checkoff2 == cellvalue2:
                MAS()

 except:
      print("something went wrong")

这是一个非常“丑陋”的解决方案(创建多个列表),但它有效。如果有人碰巧有更多的pythonic方式实现同​​样的目标,我仍然有兴趣知道

感谢您的帮助

0 个答案:

没有答案