Estou tentando extrair informações do google maps de determinado lugares do país, informações essas como nome e numero de telefone de determinadas empresas, porém o google maps utiliza-se fortemente o javascript para gerar as suas informações da página, assim tornando-se dificil a minha busca dessas informações.. alguem poderia me ajudar nessa? segue o meu código abaixo from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support import expected_conditions as EC from openpyxl import Workbook import re import pandas as pd from time import sleep class WebScraping: def __init__(self): options = webdriver.ChromeOptions() #options.add_argument('--headless=new') options.add_argument('--lang=pt-BR') options.add_argument('--disable-notifications') options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--remote-debugging-port=9222") service = webdriver.ChromeService(ChromeDriverManager().install()) self.driver = webdriver.Chrome(options=options, service=service) self.driver.get("https://www.google.com.br/maps") self.dados = {} def iniciar_classes(self): self.navegar_maps() self.raspar_clientes() self.comparar_dados() self.criar_planilha(self.dados) def navegar_maps(self): self.pesquisar = input('Digite o que deseja pesquisar: ') try: campo_busca = WebDriverWait(self.driver, 30).until( EC.presence_of_element_located((By.XPATH, '//*[@id="searchboxinput"]')) #//*[@id="searchboxinput"] ) campo_busca.send_keys(self.pesquisar) campo_busca.send_keys(Keys.RETURN) sleep(5) except Exception as e: print(f"Não foi possível acessar o elemento da página {e}") self.driver.quit() def raspar_clientes(self): tempo_scroll = 5 rolar_pagina = self.driver.execute_script('return document.body.scrollHeight') while True: self.driver.execute_script('window.scrollTo(0, document.body.scrollHeight);') sleep(tempo_scroll) tamanho_pagina_atual = self.driver.execute_script('return document.body.scrollHeight') if tamanho_pagina_atual == rolar_pagina: break rolar_pagina = tamanho_pagina_atual try: div_principal = WebDriverWait(self.driver, 10).until( EC.presence_of_all_elements_located((By.XPATH, "//div[contains(@class, 'NrDZNb')]")) ) for div in div_principal: try: nome_empresa = div.find_element(By.XPATH, ".//div[contains(@class, 'fontHeadlineSmall')]").text telefone = div.find_element(By.XPATH, ".//span[@class='Usd1k']").text self.dados[nome_empresa] = telefone print(f'{nome_empresa}: {telefone}') except Exception: print('Erro ao localizar o elemento!') except Exception as e: print('Não foi possivel coletar mais dados! error: {e}') break def comparar_dados(self): telefones_existentes = pd.read_excel('C:/Users/SAMSUNG/Desktop/Ciencia de dados/WebScraping/telefones.xlsx') telefones_existentes['TELEFONE1'] = telefones_existentes['TELEFONE1'].astype(str).apply(lambda x: re.sub(r'\D', '', x)) # trata os numeros removendo valores indevidos telefones_existentes['RAZAOSOCIAL'] = telefones_existentes['RAZAOSOCIAL'].astype(str).str.lower().str.strip() telefones_existentes_list = telefones_existentes[['TELEFONE1', 'RAZAOSOCIAL']].astype(str).values.flatten().tolist() telefones_existentes_set = set(telefones_existentes_list) deletar_titulos = [] for titulo, tel in self.dados.items(): titulo_str = str(titulo).lower().strip() tel_str = re.sub(r'\D', '', str(tel)) if tel_str in telefones_existentes_set or titulo_str in telefones_existentes_set: deletar_titulos.append((titulo, tel)) for titulo, tel in deletar_titulos: del self.dados[titulo, tel] print('-----------------------------------') print(f'Clientes removidos: {deletar_titulos}' ) def criar_planilha(self, dados): wb = Workbook() ws = wb.active ws.title = 'Prospecção' ws.append(['Nome', 'Telefone']) for nome, telefone in dados.items(): ws.append([nome, telefone]) self.arquivo_excel = 'Prospecção.xlsx' wb.save(self.arquivo_excel) print(f'Salvo como: {self.arquivo_excel}!') self.driver.quit() start = WebScraping() start.iniciar_classes() Continue reading...