Maison > Questions et réponses > le corps du texte
J'ai rencontré ce problème, j'essayais d'automatiser un processus en Python qui nécessitait de remplir une page Web et de sélectionner des valeurs dans un menu déroulant. Cependant, je suis confronté à un problème où la page ne se met pas à jour même lorsque la valeur déroulante est sélectionnée.
Voici le code pour sélectionner cet élément spécifique :
import os import time import pandas as pd from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.select import Select from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC options=Options() #options.page_load_strategy='none' options.add_experimental_option("detach", True) options.add_argument('User_profile on mac') browser = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options) file=r'Example.xlsx' webpage=r'url' df_file=pd.read_excel(file) browser.maximize_window() for i,row in df_file.iterrows(): time.sleep(3) browser.get(webpage) time.sleep(3) WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.XPATH,'/htm l/body/div[1]'))).click() cat2=browser.find_element(By.XPATH,'/html/body/span[1]') WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.ID,'s2id_autogen1'))).click() #looks for the first dropdown WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="select2-result-label-21"]'))).click() #finds the correct option WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.ID, 's2id_autogen3'))).click() #finds the second dropdown WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="select2-results-4"]/li[11]'))).click() #clicks on load more WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="select2-result-label-34"]'))).click() #click on correct option problematic_dropdown=Select(browser.find_element(By.XPATH,'//*[@id="pageAside"]/div[2]/div/dep-gud-request-ors/dep-request-ors/es-view-form/form/dep-control-request-recipients/dep-control-request-recipient/div[2]/div/fieldset/dep-control-request-recipient-household/es-view-select2[1]/div/div[1]/div/select')) browser.implicitly_wait(3) problematic_dropdown.select_by_value('1') #once this value is selected, the page does not load
J'ai essayé de sélectionner différentes valeurs, puis de sélectionner à nouveau la valeur souhaitée ; j'ai essayé d'utiliser des attentes implicites et explicites et de mettre le code en veille pendant 20 secondes. Malheureusement, rien ne fonctionne. Lorsque je me connecte manuellement au site et sélectionne une valeur, la page se met à jour normalement.
P粉7980104412023-09-12 12:45:17
Je recommande fortement d'utiliser un meilleur sélecteur XPath si vous le pouvez, mais pour ce que vous voulez faire, cliquez simplement directement sur l'élément option
, pas besoin de développer d'abord la zone de sélection p>
browser.find_element(By.XPATH,'//*[@id="pageAside"]/div[2]/div/dep-gud-request-ors/dep-request-ors/es-view-form/form/dep-control-request-recipients/dep-control-request-recipient/div[2]/div/fieldset/dep-control-request-recipient-household/es-view-select2[1]/div/div[1]/div/select/option[@value="1"]').click