这里是新手,并在此过程中绊脚石和学习.....
我正在尝试浏览一个网站,以查找和收集所有规格的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()