簡體   English   中英

如何在python selenium中循環多個元素(不同的CSS選擇器)

[英]How to loop multiple elements in python selenium (different CSS selectors)

我試圖在一個包含多個元素的類offer-list-wrapper循環,幾乎所有元素在搜索 A 和搜索 B 的網頁中都是常見的(我正在抓取一個爬蟲)。

正如您在兩張圖片中看到的, offer-list-wrapper是一個常見元素。

我想提取每個organic-offer-wrapper organic-gallery-offer-innerorganic-list-offer-inner m-gallery-product-item-v2類中的數據。 如果你使用這樣的 CSS 選擇器在它們內部循環,這很容易做到:

for element in driver.find_elements_by_css_selector('.organic-list-offer-inner.m-gallery-product-item-v2'):

通過這種方式,您可以獲取其中的每個元素。

在此處輸入圖片說明

在此處輸入圖片說明

但問題從這里開始:我需要使用一個在兩個類中循環的通用代碼在兩種情況下循環,如果出現新類,它必須在其中循環。

讓我向您展示我的代碼:

for element in driver.find_elements_by_class_name('offer-list-wrapper'):
    try:
        item_name = element.find_element_by_class_name('organic-gallery-title__content').text
    except:
        item_name = np.nan
    try:
        price = element.find_element_by_class_name('gallery-offer-price').get_attribute('title').replace('$', '').replace(',', '')
        min_order = element.find_element_by_class_name('gallery-offer-minorder').find_element_by_tag_name('span').text.replace(' Pieces', '').replace(' Piece', '').replace(' Units', '').replace(' Unit', '').replace(' Sets', '').replace(' Set', '').replace(' Pairs', '').replace(' Pair', '').replace('Boxes', '').replace('Box', '').replace('Bags', '').replace('Bag', '')     
        # separate min and max price
    except:
        price = np.nan
        min_order = np.nan

第一個只返回第一個元素:

for element in driver.find_elements_by_css_selector('.organic-offer-wrapper.organic-gallery-offer-inner'):
    try:
        item_name = element.find_element_by_class_name('organic-gallery-title__content').text
    except:
        item_name = np.nan
    try:
        price = element.find_element_by_class_name('gallery-offer-price').get_attribute('title').replace('$', '').replace(',', '')
        min_order = element.find_element_by_class_name('gallery-offer-minorder').find_element_by_tag_name('span').text.replace(' Pieces', '').replace(' Piece', '').replace(' Units', '').replace(' Unit', '').replace(' Sets', '').replace(' Set', '').replace(' Pairs', '').replace(' Pair', '').replace('Boxes', '').replace('Box', '').replace('Bags', '').replace('Bag', '')     
        # separate min and max price
    except:
        price = np.nan
        min_order = np.nan

第二個只在.organic-offer-wrapper.organic-gallery-offer-inner循環(返回我需要的所有元素),但它不會在.organic-list-offer-inner.m-gallery-product-item-v2內循環.organic-list-offer-inner.m-gallery-product-item-v2

您可以通過搜索包含屬性data-content="productItem"的 div 標簽來獲取所有產品。 那是假設每個項目都具有該屬性。 從您發布的屏幕截圖來看,情況似乎是這樣。

您可以使用 find_elements_by_xpath() 完成此操作

for item in driver.find_elements_by_xpath('//div[@data-content="productItem"]'):
    ....

這可能是最好的方法,而不必擔心具有不同 css 類的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM