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)