0
votes

Comment sélectionner un élément dans une liste déroulante où je dois faire défiler?

sur le site Web suivant: https://www1.hkexnews.hk/ Recherche / Titleearch.xhtml? Lang = fr

J'essaie de sélectionner l'option de liste déroulante suivante via SELENIUM: Sous Catégorie de titre et type de document , sur la première liste déroulante I Sélectionnez Catégorie de titre , puis sur la deuxième liste, je souhaite sélectionner Annonces et avis -> Nouvelles annonces (Émetteurs classés / nouveaux candidats -> Résultats d'allotissement .

J'ai réalisé que vous devez utiliser pilote.find_element_by_csss_selector () comme aucun des éléments de la liste n'a ID unique. J'ai également réalisé que vous devez faire défiler la page lorsque l'option n'est pas affiche, de sorte que le sélecteur CSS puisse le ramasser.

Ce que j'ai devait fonctionner mais ce n'est pas? Est-ce que quelqu'un peut m'aider à résoudre ce problème, s'il vous plaît? xxx

i reçoit actuellement un élément non trouvé d'une erreur


1 commentaires

J'ai trouvé, dans le sélecteur de CSS final que je fais, il échoue à la dernière "div> ul". Cette "ul" est celle qui ne peut pas être trouvée, lorsque je le regarde clairement dans le HTML du site Web. Il existe littéralement sous la div alors je suis complètement perdue


3 Réponses :


0
votes

Pouvez-vous essayer d'obtenir une liste des valeurs déroulantes en utilisant probablement un sélecteur CSS comme

ul li a

puis en boucle pour trouver une valeur correspondante et cliquez dessus


1 commentaires

La chose est que je ne peux même pas boucler à travers elle. Je ne trouve pas la liste déroulante qui apparaît lorsque je clique sur "Nouvelles annonces (émetteurs répertoriés / nouveaux candidats) en premier lieu



0
votes

Idéalement, nous ne devrions pas sélectionner un élément avec un tel sélecteur CSS complexe, essayez de raccourcir le sélecteur CSS.

ALORS, P>

Essayez de survoler la souris au premier élément de la liste déroulante de la liste déroulante. / p> xxx pré>

puis, p>

Essayez de faire défiler jusqu'à l'élément dont vous avez besoin d'utiliser, P>

driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth', block: 'center', inline: 'nearest'});",element_to_be_selected)


2 commentaires

En ce qui concerne le sélecteur CSS complexe - aucun élément de la page n'a d'identifiant / nom à partir de la barre réelle dont la liste déroulante est plainte. Par conséquent, le seul moyen de sélectionner des éléments dans cette barre est de les trouver avec un sélecteur CSS complexe droit?


Si vous avez une classe alignée sur les balises, vous pouvez l'utiliser pour réduire la taille du CSS. Comme div.class li.class



0
votes

Pour cliquer sur l'élément à partir de la liste déroulante Induce webDriverWait code> et présence_of_element_located () code> puis utilisez emplacement_once_scrollle_into_view code> et cliquez sur l'élément en utilisant XPath.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get('https://www1.hkexnews.hk/search/titlesearch.xhtml?lang=en')
driver.maximize_window()
wait = WebDriverWait(driver,40)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'div.combobox-input-wrap a[data-value="rbAll"]'))).click()
wait.until(EC.element_to_be_clickable((By.XPATH,'//div[@class="droplist-item"]/a[contains(.,"Headline Category")]'))).click()
wait.until(EC.element_to_be_clickable((By.XPATH,'//div[@id="rbAfter2006"]//div[@class="combobox-input-wrap"]/a[contains(.,"ALL")]'))).click()
wait.until(EC.element_to_be_clickable((By.XPATH,'//div[@class="droplist-group"]//ul[@class="droplist-items"]//li/a[contains(.,"Announcements and Notices")]'))).click()
ele=wait.until(EC.presence_of_element_located((By.XPATH,'//div[@class="droplist-group droplist-submenu level2"]//ul//li/a[contains(.,"New Listings (Listed Issuers/New Applicants)")]')))
ele.location_once_scrolled_into_view
ele.click()
ele2=wait.until(EC.presence_of_element_located((By.XPATH,'//div[@class="droplist-group droplist-submenu level3"]//ul//li/a[contains(.,"Allotment Results")]')))
ele2.location_once_scrolled_into_view
ele2.click()


0 commentaires