我假设我在分配指向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()
答案 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')
用它做一些很棒的事情!
这有帮助吗?