La page ne se met pas à jour après avoir sélectionné l'option dans l'élément déroulant dans Selenium
P粉043470158
P粉043470158 2023-09-11 18:35:56
0
1
672

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粉043470158
P粉043470158

répondre à tous(1)
P粉798010441

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal