-1
votes

Comment localiser l'ID de produit dans le conteneur de produit en utilisant du sélénium en utilisant Python?

J'essaie d'explorer les ID de produit dans un site Web, tandis que l'ID se trouve dans le conteneur du produit. Il ne renvoie aucun élément de ce type:

<div data-v-8cd3b522="" na-element="item" na-module="product" na-data="{“ids_value”:[“#300#”],”ids_key”:”item_type_ids”,”item_type_ids”:[“#300#”],”tag_ids”:[“#85#”],”app_page_section_id”:10103,”app_page_id”:10011}" class="na finger product-container" na-id="9cd1a902-57aa-48d4-b79c-2bca03d21b83">

HTML:

driver.find_element_by_class_name('na finger product-container')

L'attribut que je voulais récupérer est le ids_value qui est #300# dans ce cas.

le site Web: https://www.gratus.com.hk/product/

l'exemple html


3 commentaires

Quel attribut voulez na-id vous na-id ?


l'attribut que je voulais est le "ids_value" qui est "# 300 #" dans le cas


C'est une bonne idée de publier un stackoverflow.com/help/minimal-reproducible-example , afin que les autres utilisateurs puissent coller votre code et répondre rapidement.


4 Réponses :


0
votes

Si vous souhaitez utiliser @class comme identifiant, essayez de rechercher par nom de classe unique

driver.find_element_by_css_selector('.na.finger.product-container') 

ou par sélecteur CSS

driver.find_element_by_class_name('product-container')

Vous devrez peut-être également implémenter une attente implicite / explicite car les données requises semblent dynamiques


2 commentaires

peut localiser la division individuelle du produit en utilisant "driver.find_element_by_css_selector ('. na.finger.product-container')", mais comment accéder à {"ids_value": "300"} à l'intérieur du "na-data"?


.get_attribute ('na-data') puis peut-être parser.



-1
votes

driver.find_element_by_css_selector ('. na.finger.product-container'). get_attribute ('na-data')

revenir

{"ids_value": ["# 290 #"], "ids_key": "item_type_ids", "item_type_ids": ["# 290 #"], "tag_ids": ["# 4 #"], "app_page_section_id": 10103 , "app_page_id": 10011}

Merci tout le monde!


0 commentaires

0
votes

Pour analyser la balise.

['#290#']       

Les sorties

import json
elem=driver.find_element_by_css_selector('.na.finger.product-container').get_attribute('na-data')
myJSON = json.loads(elem)
print(myJSON["ids_value"])


0 commentaires

0
votes

Pour extraire l' ids_value par exemple 290 , 291, etc., de tous les <div> utilisant Selenium et vous devez induire WebDriverWait pour la visibility_of_all_elements_located() et vous pouvez utiliser l'une des stratégies de localisation suivantes:

  • Utilisation de CSS_SELECTOR :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Utilisation de XPATH :

    ['290', '291', '292', '295', '296', '297', '298', '299', '300', '302', '303', '305', '306', '307', '308', '309']
    
  • Sortie de la console:

    print([my_elem.get_attribute("na-data").split("#")[1] for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@na-element='item' and @na-module='product']")))])
    
  • Remarque : vous devez ajouter les importations suivantes:

    print([my_elem.get_attribute("na-data").split("#")[1] for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div[na-element='item'][na-module='product']")))])
    


0 commentaires