2016-09-13 3 views
0

Ich gehe davon aus, dass ich einen Fehler bei der Zuweisung von Links zu gleich der Anweisung driver.get bin. Ich muss innerhalb der Seite eine Schleife machen, bis es alle Links erfasst, aber ich vermassle irgendwo. Ich erhalte den Fehler „Typeerror:‚NoneType‘Objekt ist nicht iterable“ in der Zeile „für Link in Links gilt:“'NoneType' -Objekt ist in Schleife nicht iterierbar

import requests 
from bs4 import BeautifulSoup 
from selenium import webdriver 
import csv 

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

driver = webdriver.PhantomJS() 
links = driver.get('https://www.homedepot.ca/en/home/categories/appliances/refrigerators-and-freezers/refrigerators.html') 

for link in links: 
    name = driver.find_element_by_class_name('product-name') 
    model = driver.find_element_by_class_name('product-model') 
    price = driver.find_element_by_class_name('product-display-price') 
    detail = driver.find_element_by_class_name('js-detail-link') 

    for x, y, z, q in zip(name, model, price, detail): 
     c= (x.text, y.text, z.text, q.get_attribute("href")) 
     print (x.text, y.text, z.text, q.get_attribute("href")) 
     a.writerow(c) 

b.close() 
+0

"aussprechbar"? Sicher sagt der Fehler "iterable"? – ShadowRanger

+0

Danke. Autokorrektur Ich glaube, es wurde geändert – user6794561

Antwort

0

Selen webdrivers Rückkehr nichts von ihrer get Methode, und in der Tat der Die Methode get kann zurückgegeben werden, bevor die Webseite überhaupt geladen wurde. Siehe Dokumentation für waiting for content.

+0

Wenn ich dies für einen einzelnen Link verwende, funktioniert es perfekt. Ich brauche es nur viele Male auf der Seite – user6794561

+0

zu wiederholen. Ich bin mir nicht sicher, was ich dir darüber erzählen soll. Die [Selen-Dokumentation] (http://docs.seleniumhq.org/docs/03_webdriver.jsp#selenium-webdriver-api-commands-and-operations) besagt, dass die Webseite nicht unbedingt vollständig oder überhaupt nicht von der '' geladen wird get 'Methode, abhängig von verschiedenen Faktoren, und die [get Methode gibt keinen Wert zurück] (https://github.com/SeleniumHQ/selenium/blob/master/py/selenium/webdriver/remote/webdriver.py#L244). –

0

Ich glaube, Sie versuchen zu:

gehen Sie auf die Seite eine Liste aller Produkte machen lesen und bestimmte Eigenschaften dieser Produkte zu schreiben.

Wenn das stimmt, dann:

1) mit driver.get auf die Seite (keine Notwendigkeit, es zu vergeben, da bekommen nicht alles zurück)

2) eine Liste machen. so etwas wie link = driver.find_elements_by_classname ('Produkt-Details')

3) dann über die Liste iterieren für Link in Links verwenden:

und die spezifische Eigenschaft im Produkt finden, so etwas wie: product_href = link.find_element_by_css_selector ('a'). get_attribute ('href')

und machen Sie etwas Großartiges damit!

Hilft das?

Verwandte Themen