自动化的网页浏览| |循环浏览href的收集列表| | selenium.common.exceptions.StaleElementReferenceException

时间:2019-03-01 14:58:08

标签: python-3.x loops selenium selenium-webdriver click

这里是新手,并在此过程中绊脚石和学习.....

我正在尝试浏览一个网站,以查找和收集所有规格的pdf。该网站的结构不一致,因此我必须搜索许多链接,然后在该链接中搜索以查看是否存在包含字符串“ specsheet”的href,然后将收集pdf。

首先,我从产品页面收集所有可能的href,其中可能包含带有规格表的链接,并创建{hrefs:element}的字典。

计划是循环到我从产品页面收集的每个元素,并查看单击时是否存在带有“ specsheet”的href。然后返回并单击进入词典中的下一个元素。

通过阅读有关此内容的其他文章,我认为我知道是什么导致了此错误,尽管我对此没有深入的了解。当我单击进入页面并搜索规格,然后再次执行循环时,听起来好像它更改了一些引用?那么,由于某些更改,尝试单击下一个元素时它失败了吗?我不知道会发生什么变化。如何克服这个问题才能成功遍历我的字典?

我们将不胜感激!

from selenium import webdriver
import time

browser = webdriver.Chrome("C:\\Users\monoc\OneDrive\Documents\Python\chromedriver_win32\chromedriver")
browser.get("http://somewebsite.com/products")



id = browser.find_elements_by_xpath('//*[@href]')

#Creates Dictionary of {href : element} Using href link as a search reference to collect all spec documents from website. get_links_dict() isn't the exact code, but general idea. 
def get_links_dict():
    href_list = []
    item_list = []
    for item in id:
       href = item.get_attribute('href')
       href_list.append(href)
       item_list.append(item)

    #Dictionary {href: element}
    href_item = {}
    for i in range(len(item_list)-1):
       href_item[href_list[i]] = item_list[i]

    return href_item



#Use dictionary and a for loop to enter each href(link) to search if specsheet exists. Returns back to previous page to search the next key(link/href). 
def search_specsheet():
    href_item = get_links_dict()
    for key,value in href_item.items():
        print('Key we are clickling into {}'.format(key))
        value.click()
        id2 = browser.find_elements_by_xpath('//*[@href]')
        for item in id2:
             href3 = item.get_attribute('href')
             print('We Are Here {}'.format(href3))
             if 'specsheet' in str(href3):
                 print('True')
                 print('Found Specsheet: {}'.format(str(href3)))
             else:
                 pass
        browser.execute_script("window.history.go(-1)")
        time.sleep(5)



def main():
    search_specsheet()


main()


browser.close()

0 个答案:

没有答案