Files
2026-05-18 06:40:19 +00:00

106 lines
3.6 KiB
Python

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()