'NoneType'对象在循环中不可迭代

时间:2016-09-13 00:01:39

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

我假设我在分配指向driver.get语句的链接时犯了一个错误。我需要在页面内循环,直到它抓住所有链接,但我在某处乱搞。我一直得到“TypeError:'NoneType'对象不可迭代”的错误“在链接中的链接:”

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()

2 个答案:

答案 0 :(得分:0)

Selenium webdrivers不会从get方法返回任何内容,实际上get方法可能会在网页开始加载之前返回。请参阅waiting for content的文档。

答案 1 :(得分:0)

我认为您正在尝试:

转到该页面 列出所有产品 读取和写入这些产品的某些属性。

如果这是正确的话:

1)转到带有driver.get的页面(无需分配,因为get不会返回任何内容)

2)列出一个清单。类似于link = driver.find_elements_by_classname(' product-details')

3)然后使用链接中的链接迭代列表:

找到产品中的特定属性,例如: product_href = link.find_element_by_css_selector(' a')。get_attribute(' href')

用它做一些很棒的事情!

这有帮助吗?