J'essaie de Webscrape à travers cette page Web https://www.sigmaaldrich.com/ . Jusqu'à présent, j'ai réalisé que le code utilise la méthode des requêtes pour utiliser la barre de recherche. Après cela, je veux chercher les différents prix des composés. Le code html qui inclut les prix n'est pas visible tant que vous n'avez pas cliqué sur la liste déroulante Prix. J'ai réalisé cela en utilisant du sélénium pour cliquer sur toutes les listes déroulantes avec la classe souhaitée. Mais après cela, je ne sais pas comment obtenir le code html de la page Web qui est généré après avoir cliqué sur les listes déroulantes et où le prix est placé.
Voici mon code pour l'instant:
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
#get the desired search terms by imput
name=input("Reagent: ")
CAS=input("CAS: ")
#search using the name of the compound
data_name= {'term':name, 'interface':'Product%20Name', 'N':'0+',
'mode':'mode%20matchpartialmax', 'lang':'es','region':'ES',
'focus':'product', 'N':'0%20220003048%20219853286%20219853112'}
#search using the CAS of the compound
data_CAS={'term':CAS, 'interface':'CAS%20No.', 'N':'0','mode':'partialmax',
'lang':'es', 'region':'ES', 'focus':'product'}
#get the link of the name search
r=requests.post("https://www.sigmaaldrich.com/catalog/search/", params=data_name.items())
#get the link of the CAS search
n=requests.post("https://www.sigmaaldrich.com/catalog/search/", params=data_CAS.items())
#use selenium to click in the dropdown(only for the name search)
driver=webdriver.Chrome(executable_path=r"C:\webdrivers\chromedriver.exe")
driver.get(r.url)
dropdown=driver.find_elements_by_class_name("expandArrow")
for arrow in dropdown:
arrow.click()
Comme je l'ai dit, après cela, je dois trouver un moyen d'obtenir le code html après avoir ouvert les listes déroulantes afin de pouvoir rechercher la classe de prix. J'ai essayé différentes choses mais je ne semble pas trouver de solution de travail.
Merci de votre aide.
Tout d'abord, vous devez utiliser WebDriverWait comme Austen l'avait souligné.
Pour votre question, essayez ceci:
from selenium import webdriver
driver=webdriver.Chrome(executable_path=r"C:\webdrivers\chromedriver.exe")
driver.get(r.url)
dropdown=driver.find_elements_by_class_name("expandArrow")
for arrow in dropdown:
arrow.click()
html_source = driver.page_source
print(html_source)
J'espère que cela vous aide!
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots