106 lines
3.6 KiB
Python
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()
|