May 17, 2026, 11:40 PM
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user