2017-06-07 65 views
-1

遇到陈旧元素参考时遇到问题。我认为innerArticles数组是错误的,因为它控制着整个循环。在我明确刷新后,我得到陈旧的元素异常。Python陈旧元素参考:元素未附加到页面文档

本质上我希望页面保持刷新,直到SubItems xpath中的“文本”出现在页面上。由于我不知道什么时候会发生这种情况,我需要开始并继续重新加载。

任何帮助表示赞赏。

代码:

innerArticles = driver.find_elements_by_xpath("//div[@class='inner-article']") 

for links in innerArticles: 
    print('inFor') 

    SubItems = links.find_elements_by_xpath("//a[text()='Text']") 

    iterator = 0 
    if len(SubItems) < 1: 
     print('Sub < 1') 
     while iterator < 5: 
      print('While', iterator) 

      time.sleep(1) # sleep 1 seconds to refresh again 
      iterator = iterator + 1 # iterate 
      driver.refresh() # refresh 
      SubItems = links.find_elements_by_xpath("//a[text()='Text']") 
      break 
      if len(SubItems) > 0: 
       print('break') 
       break 

    if len(SubItems) > 0: 
     print('SecondIf') 
     if links.text.startswith('SText') and links.text.endswith('SText'): 
      links.click() 
+0

确定一旦页面被加载,文本将在那里?或者文字外观纯粹是随机的和不确定的? – codekaizer

+0

是的,它几乎可以确定。 –

回答

0

当你正在做的明确刷新,链接对象将不再有效,将抛出StaleElementReferenceException。刷新后应该再次获取该元素。你可以尝试像下面这样的东西:

innerArticles = driver.find_elements_by_xpath("//div[@class='inner-article']") 

for i in range(len(innerArticles)): 
    print('inFor') 

    SubItems = driver.find_elements_by_xpath("//div[@class='inner-article']")[i].find_elements_by_xpath("//a[text()='Text']") 

    iterator = 0 
    if len(SubItems) < 1: 
     print('Sub < 1') 
     while iterator < 5: 
      print('While', iterator) 

      time.sleep(1) # sleep 1 seconds to refresh again 
      iterator = iterator + 1 # iterate 
      driver.refresh() # refresh 
      SubItems = driver.find_elements_by_xpath("//div[@class='inner-article']")[i].find_elements_by_xpath("//a[text()='Text']") 
      break 
      if len(SubItems) > 0: 
       print('break') 
       break 

    if len(SubItems) > 0: 
     print('SecondIf') 
     links = driver.find_elements_by_xpath("//div[@class='inner-article']")[i] 
     if links.text.startswith('SText') and links.text.endswith('SText'): 
      links.click() 
+0

这解决了我的问题。非常感谢,已经有好几天了:)我是Python和Selenium的新手,但是我发现你正在用concat方法重新构建post refresh? –

+0

@ gamb1t_88 - 我刚刚尝试使用您现有的代码。欢迎来到蟒蛇和硒。更多地研究如何以更好的方式处理同样的事情。为什么你需要刷新页面? – Amit

+0

本质上不知道什么时候页面将有我需要的数据,而不是由于加载时间而不是数据发布到页面。有更聪明的解决方案吗? –

相关问题