from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException import time import re from bs4 import BeautifulSoup # Konfiguracja Selenium def setup_driver(): chrome_options = Options() chrome_options.add_argument("--headless") # Tryb bez GUI chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") service = Service(executable_path="./chromedriver.exe") # Zmień na ścieżkę do chromedrivera driver = webdriver.Chrome(service=service, options=chrome_options) return driver # Funkcja do wyszukiwania w Google def search_google(query, driver): driver.get("https://www.google.com") try: # Użycie WebDriverWait, aby poczekać aż pole wyszukiwania będzie gotowe do interakcji search_box = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.NAME, "q")) ) # Przewinięcie do elementu (w razie potrzeby) driver.execute_script("arguments[0].scrollIntoView(true);", search_box) # Wpisanie zapytania search_box.send_keys(query) search_box.submit() # Czekanie na załadowanie wyników time.sleep(2) # Pobranie źródła strony wyników page_source = driver.page_source return page_source except TimeoutException: print("Pole wyszukiwania nie było dostępne do interakcji.") return None # Funkcja do wyodrębniania informacji z wyników def extract_info_from_results(page_source): soup = BeautifulSoup(page_source, 'html.parser') emails = set() companies = set() contacts = set() # Wyszukiwanie emaili email_pattern = re.compile(r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}") for email in email_pattern.findall(soup.text): emails.add(email) # Wyszukiwanie nazw firm (przykładowo zakładamy, że nazwy firm mogą być linkami w wynikach) for company in soup.find_all('h3'): companies.add(company.get_text()) # Wyszukiwanie osób kontaktowych (przykładowo zakładamy, że mogą być wyodrębniane z opisów wyników) for contact in soup.find_all('span', {'class': 'aCOpRe'}): if "contact" in contact.text.lower() or "osoba kontaktowa" in contact.text.lower(): contacts.add(contact.get_text()) return emails, companies, contacts # Główna funkcja def main(): query = 'site:{{SITE-URL}} "@gmail.com" OR "@yahoo.com" OR "@hotmail.com" OR "@outlook.com" OR "@aol.com" OR "@icloud.com"' driver = setup_driver() try: # Wykonaj wyszukiwanie page_source = search_google(query, driver) if page_source: # Wyodrębnij informacje z wyników emails, companies, contacts = extract_info_from_results(page_source) # Wyświetl wyniki print("Znalezione adresy e-mail:") for email in emails: print(email) print("\nZnalezione nazwy firm:") for company in companies: print(company) print("\nZnalezione osoby kontaktowe:") for contact in contacts: print(contact) finally: driver.quit() # Uruchomienie programu main()