2016-09-14 25 views
0

以下錯誤不時彈出,而不總是出現在同一個地方。不完全確定爲什麼。任何線索?全部代碼在這裏:Full Code有時會出現錯誤,有時會出現在不同的地點

File "/Users/davidkasapchuk/PycharmProjects/Test/HomeDepotFridges.py", line 257, in price = item.find_element_by_class_name('product-display-price') File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webelement.py", line 264, in find_element_by_class_name return self.find_element(by=By.CLASS_NAME, value=name) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webelement.py", line 478, in find_element {"using": by, "value": value})['value'] File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webelement.py", line 461, in _execute return self._parent.execute(command, params) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute self.error_handler.check_response(response) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: {"errorMessage":"Unable to find element with class name 'product-display-price'","request":{"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"138","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:52314","User-Agent":"Python-urllib/3.5"},"httpVersion":"1.1","method":"POST","post":"{\"id\": \":wdc:1473895291967\", \"using\": \"class name\", \"sessionId\": \"eb417d30-7ad1-11e6-82c2-d52d6cd5b804\", \"value\": \"product-display-price\"}","url":"/element","urlParsed":{"anchor":"","query":"","file":"element","directory":"/","path":"/element","relative":"/element","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/element","queryKey":{},"chunks":["element"]},"urlOriginal":"/session/eb417d30-7ad1-11e6-82c2-d52d6cd5b804/element/:wdc:1473895291967/element"}} Screenshot: available via screen

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/Users/User/PycharmProjects/Test/HomeDepotFridges.py", line 266, in model = 'n/a'.text AttributeError: 'str' object has no attribute 'text'>

import csv 
from selenium import webdriver 
from selenium.common.exceptions import NoSuchElementException 
import time 

b = open('csv/homedepotfridges.csv', 'w', newline='') 
a = csv.writer(b,delimiter=',') 

driver = webdriver.PhantomJS() 
driver.get('https://www.homedepot.ca/en/home/categories/appliances/refrigerators-and-freezers/refrigerators.html') 
time.sleep(15) 
items = [] 

for item in driver.find_elements_by_class_name('item'): 
    try: 
     model = item.find_element_by_class_name('product-model') 
     price = item.find_element_by_class_name('product-display-price') 
     title = item.find_element_by_class_name('product-title') 
     url = item.find_element_by_class_name('js-detail-link') 

     items.append({'model': model, 'price': price, 'title': title, 'url': url}) 
     print (model.text, price.text, title.text, url.get_attribute("href")) 
     c = (model.text, price.text, title.text, url.get_attribute("href")) 
     a.writerow(c) 
    except NoSuchElementException: 
    model = 'n/a'.text 
    price = 'N/A'.text 
    title = 'N/A'.text 
    url = 'N/A'.text 
    items.append({'model': model, 'price': price, 'title': title, 'url': url}) 
    print(model.text, price.text, title.text, url.get_attribute.text("href")) 
    c = (model.text, price.text, title.text, url.get_attribute("href")) 
    a.writerow(c) 
b.close() 

b = open('csv/homedepotfridges.csv', 'a', newline='') 
a = csv.writer(b,delimiter=',') 

driver = webdriver.PhantomJS() 
driver.get('https://www.homedepot.ca/en/home/categories/appliances/refrigerators-and-freezers/refrigerators.html#!p=1&q=*%3Arelevance%3AcategoryPathHierarchy%3A3%2Fhd-classes%2Fl1-appliances%2Fl2-refrigerators-freezers%2F1010215') 
time.sleep(15) 
items = [] 

for item in driver.find_elements_by_class_name('item'): 
    try: 
     model = item.find_element_by_class_name('product-model') 
     price = item.find_element_by_class_name('product-display-price') 
     title = item.find_element_by_class_name('product-title') 
     url = item.find_element_by_class_name('js-detail-link') 

     items.append({'model': model, 'price': price, 'title': title, 'url': url}) 
     print (model.text, price.text, title.text, url.get_attribute("href")) 
     c = (model.text, price.text, title.text, url.get_attribute("href")) 
     a.writerow(c) 
    except NoSuchElementException: 
     model = 'n/a'.text 
     price = 'N/A'.text 
     title = 'N/A'.text 
     url = 'N/A'.text 
     items.append({'model': model, 'price': price, 'title': title, 'url': url}) 
     print(model.text, price.text, title.text, url.get_attribute.text("href")) 
     c = (model.text, price.text, title.text, url.get_attribute("href")) 
     a.writerow(c) 
b.close() 

回答

0

你應該使用等待某種等待元素對他們的執行行動之前加載。這可以解決你的問題。

+0

它不。我添加了time.sleep(45),45秒等待,但仍然無法工作。看起來問題出在PhantomJS()上,就像我用Chrome()做的那樣,並且之後將Chrome徹底殺死。 – user6794561

+0

在這種情況下測試運行後可能會殺死chrome驅動程序?無論如何不應該保持chrome驅動程序的實例運行。 – Moser