2 votes

Problème de sélection de plusieurs liens sur un site Web - Python & Selenium

Je suis assez nouveau dans le web scraping. J'essaie d'écrire quelque chose en python avec selenium qui se connectera automatiquement à un site web et cliquera sur plusieurs options d'un menu déroulant. Une fois toutes ces options définies, un bouton sera cliqué et une nouvelle page apparaîtra avec plusieurs liens hypertextes. C'est là que je rencontre des problèmes. J'essaie de cliquer sur tous les liens hypertextes, mais tous les liens hypertextes ont cette structure

Export  

Où seuls 'life=1' et 'smo=1' peuvent être modifiés en autre chose dans le code HTML ci-dessus.

La plupart des autres problèmes que j'ai rencontrés ici ont tendance à avoir des liens hypertextes avec une classe ou quelque chose du genre qui facilite le clic sur ces liens.

Le code ci-dessous est ce que j'ai écrit jusqu'à présent.

import selenium, time
import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup, SoupStrainer
import requests

#identifiants
usernameStr = 'NomUtilisateur'
passwordStr = 'MotDePasse'

browser = webdriver.Firefox(executable_path = r'C:\Users\Name\Downloads\geckodriver-v0.24.0-win64\geckodriver.exe')
url = 'http://quelquesite.com/quelquechose/'
browser.get(url)

username = browser.find_element_by_id('username')
username.send_keys(usernameStr)

password = browser.find_element_by_id('password')
password.send_keys(passwordStr)

loginInButton = browser.find_element_by_id("login")
loginInButton.click()

browser.find_element_by_xpath("//*[@id='LifeType']").send_keys("Dual")
browser.find_element_by_id("btnRefresh").click()
browser.find_element_by_id("btnExport").click()

other_url = 'http://quelquesite.com/some/exportToExcelChoice.asp?qt=1&qa=0&ben=1&tpt=0&gl=1&cl=CAESFFHIILNI'

ci-dessous est où je rencontre les problèmes

page = requests.get(other_url)    
data = page.text
soup = BeautifulSoup(data, features="html.parser")

for link in soup.find_all('a'):
    link.get('href')
    browser.find_element_by_link_text("Export").click()

Avec Beautiful Soup, je peux facilement afficher les liens requis, mais je ne suis pas sûr que ce soit nécessaire puisque je ne peux pas cliquer sur les liens. Je suis toujours en train de résoudre ce problème.

PS Je sais que ce n'est pas strictement du web scraping car tout ce que je fais est de cliquer sur des boutons dans le but ultime de tout mettre dans un fichier csv.

HTML:

        Quote

        td {
            font-size: 14px
        }

                Veuillez sélectionner le type de fichier csv que vous souhaitez générer
                Veuillez être patient car cela peut prendre quelques instants !

                Homme sExport
                       
                Homme sExport

                Femme Non-sExport
                 
                Femme sExport

                Joint Non-sExport
                 
                Joint sExport

                Dual Non-sExport
                 
                Dual sExport

0voto

Sers Points 10850

Comme je l'ai compris, le popup est une nouvelle fenêtre et vous devez passer à celle-ci :

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

#...
other_url = 'http://somewebsite.com/something/exportToExcelChoice.asp?qt=1&qa=0&ben=1&tpt=0&gl=1&cl=CAESFFHIILNI'

wait = WebDriverWait(browser, 10)

#handles = driver.window_handles
browser.get(other_url)
#wait.until(EC.new_window_is_opened(handles))
#driver.switch_to.window(driver.window_handles[-1])

links = wait.until(EC.visibility_of_all_elements_located((By.TAG_NAME,"a")))
for link in links:
    link.click()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X