estava conseguindo resolver bem uma atividade mas fiquei preso com a parte de preço do produto, coloco a tag e a classe corretamente porem, na hora que tento fazer uma lista os valores ficam desproporcionais
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
# Inicializar o Chrome
driver = webdriver.Chrome()
# Abrir o Mercado Livre
driver.get("https://www.mercadolivre.com.br")
# Encontrar o campo de busca pelo ID e inserir o termo de pesquisa "notebook"
campo_pesquisa = driver.find_element(By.ID, "cb1-edit")
campo_pesquisa.send_keys("notebook")
campo_pesquisa.send_keys(Keys.RETURN)
# Aguardar o carregamento
time.sleep(4)
# Obter e imprimir os títulos dos produtos encontrados
produtos = driver.find_elements(By.CLASS_NAME, "ui-search-item__title")
precos = driver.find_elements(By.CLASS_NAME, "andes-money-amount__fraction")
# Verificar se ambos têm o mesmo comprimento
if len(produtos) == len(precos):
# Combinar produtos e preços em uma lista de tuplas
lista_combinada = [(produtos[i].text, precos[i].text) for i in range(len(precos))]
# Imprimir a lista combinada
for produto, preco in lista_combinada:
print(f"Produto: {produto}, Preço: {preco}")
else:
print("As listas de preços e produtos não têm o mesmo comprimento.")
# Encerrar o processo
driver.quit()
na hora da verificacao sempre aparece que os produtos nao tem o mesmo comprimento mas nao consegui resolver
O problema pode estar ocorrendo porque você está verificando o comprimento das listas de preços e produtos separadamente. Embora ambas as listas devam estar sincronizadas (cada produto tem um preço correspondente), o comprimento pode ser diferente se houver algum atraso no carregamento da página ou se houver algum elemento invisível que está sendo capturado.
Tente isso
# Verificar se ambos têm o mesmo comprimento
if len(produtos) == len(precos):
# Combinar produtos e preços em uma lista de tuplas
lista_combinada = []
for i in range(len(produtos)):
# Verificar se o preço está disponível para o produto
if i < len(precos):
lista_combinada.append((produtos[i].text, precos[i].text))
else:
# Se não houver preço disponível, adicione None como preço
lista_combinada.append((produtos[i].text, None))
# Imprimir a lista combinada
for produto, preco in lista_combinada:
print(f"Produto: {produto}, Preço: {preco}")
else:
print("As listas de preços e produtos não têm o mesmo comprimento.")
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
# Inicializar o Chrome
driver = webdriver.Chrome()
try:
# Abrir o Mercado Livre
driver.get("https://www.mercadolivre.com.br")
# Encontrar o campo de busca pelo ID e inserir o termo de pesquisa "notebook"
campo_pesquisa = driver.find_element(By.ID, "cb1-edit")
campo_pesquisa.send_keys("notebook")
campo_pesquisa.send_keys(Keys.RETURN)
# Esperar os resultados carregarem
WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "ui-search-item__title")))
# Obter os títulos dos produtos encontrados
produtos = driver.find_elements(By.CLASS_NAME, "ui-search-item__title")
# Obter os preços dos produtos encontrados
precos = driver.find_elements(By.CLASS_NAME, "andes-money-amount__fraction")
# Filtrar produtos e preços para garantir que temos pares completos
lista_combinada = []
for produto, preco in zip(produtos, precos):
lista_combinada.append((produto.text, preco.text))
# Imprimir a lista combinada
for produto, preco in lista_combinada:
print(f"Produto: {produto}, Preço: {preco}")
finally:
# Encerrar o processo
driver.quit()
Uso de WebDriverWait
: Utiliza-se WebDriverWait
para esperar até que os elementos dos produtos estejam carregados, garantindo que a página esteja pronta para a coleta de dados.
Captura de Elementos Precisos: A função zip
garante que apenas pares completos de produtos e preços sejam adicionados à lista combinada.
Filtragem de Dados: A lógica de filtragem evita que listas de produtos e preços de tamanhos diferentes causem problemas.