Python with selenium : 遍历列表中的第一个网络元素
Python with selenium : Looping trough the first web element in a list
我是 python 和 selenium webdriver 的新手,我已经开始给自己一些“任务”来练习。
我有下一个问题:
以下代码用于识别页面中正确的产品数量,如果我打印 all_products,在 pdb 中将打印:最多 12 个不同的 Web 元素;(页面上有 12 个默认结果或更少,具体取决于可用项目)
我想用“产品名称”和“产品价格”在字典中打印此页面中的每个产品
但有些地方不对劲,它似乎循环遍历了第一个 Web 元素,输出为:
产品数量:11
[{'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68 '}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599 ,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}]
url = "https://www.orange.ro/magazin-online/telefoane?order=ASC&sort=TopSales&from=0&size=12&filter=Huawei,Apple,Faraabonament1,Noi,Instoc"
driver.get(url)
all_products_class = 'ws-product'
all_products = driver.find_elements(By.CLASS_NAME, all_products_class)
print(f"Number of products: {len(all_products)}")
all_product_price = []
for product in all_products:
device_name_xpath = ".//span[@class='ws-product-model-name']"
device_name = driver.find_element(By.XPATH, device_name_xpath)
name = device_name.text
device_price_xpath = ".//span[@class='ws-product-price']"
device_price = driver.find_element(By.XPATH, device_price_xpath)
price = device_price.text
all_product_price.append({'Name': name, 'Price' : price})
print(all_product_price)
driver.quit
您的代码中似乎缺少某些内容。
当遍历所有产品的列表并在此处检索每个产品的详细信息时
device_name_xpath = ".//span[@class='ws-product-model-name']"
device_name = driver.find_element(By.XPATH, device_name_xpath)
您(很可能)必须从您的所有产品列表中指定唯一的 属性 产品(可能有产品 ID)。
换句话说:在你的循环中,你总是 select 具有名称为 ws-product-model-name.
的 class 的相同跨度
我在代码中发现了问题:
device_name = driver.find_element(By.XPATH, device_name_xpath)
替换为:
device_name = product.find_element(By.XPATH, device_name_xpath)
&
device_price = driver.find_element(By.XPATH, device_price_xpath)
替换为
device_price = product.find_element(By.XPATH, device_price_xpath)
我是 python 和 selenium webdriver 的新手,我已经开始给自己一些“任务”来练习。 我有下一个问题: 以下代码用于识别页面中正确的产品数量,如果我打印 all_products,在 pdb 中将打印:最多 12 个不同的 Web 元素;(页面上有 12 个默认结果或更少,具体取决于可用项目) 我想用“产品名称”和“产品价格”在字典中打印此页面中的每个产品 但有些地方不对劲,它似乎循环遍历了第一个 Web 元素,输出为:
产品数量:11 [{'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68 '}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599 ,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}, {'Name': 'Nova 9 SE 128GB Crystal Blue', 'Price': '1599,68'}]
url = "https://www.orange.ro/magazin-online/telefoane?order=ASC&sort=TopSales&from=0&size=12&filter=Huawei,Apple,Faraabonament1,Noi,Instoc"
driver.get(url)
all_products_class = 'ws-product'
all_products = driver.find_elements(By.CLASS_NAME, all_products_class)
print(f"Number of products: {len(all_products)}")
all_product_price = []
for product in all_products:
device_name_xpath = ".//span[@class='ws-product-model-name']"
device_name = driver.find_element(By.XPATH, device_name_xpath)
name = device_name.text
device_price_xpath = ".//span[@class='ws-product-price']"
device_price = driver.find_element(By.XPATH, device_price_xpath)
price = device_price.text
all_product_price.append({'Name': name, 'Price' : price})
print(all_product_price)
driver.quit
您的代码中似乎缺少某些内容。
当遍历所有产品的列表并在此处检索每个产品的详细信息时
device_name_xpath = ".//span[@class='ws-product-model-name']"
device_name = driver.find_element(By.XPATH, device_name_xpath)
您(很可能)必须从您的所有产品列表中指定唯一的 属性 产品(可能有产品 ID)。
换句话说:在你的循环中,你总是 select 具有名称为 ws-product-model-name.
的 class 的相同跨度我在代码中发现了问题:
device_name = driver.find_element(By.XPATH, device_name_xpath)
替换为:
device_name = product.find_element(By.XPATH, device_name_xpath)
&
device_price = driver.find_element(By.XPATH, device_price_xpath)
替换为
device_price = product.find_element(By.XPATH, device_price_xpath)