HER ŞEY PARA DEĞİL!!!
Arkadaşlar elimde bir proxy destekli olabildiğince özgün cookie oluşturmaya yarayan bir kod var. Bu işin uzmanları lütfen incelesin baksın ve ona göre söylesin. Bu kod bir işe yarar mı yaramaz mı diye. Ayrıca bu kodun ortaya çıkardığı cookieler nerelerde kullanılır. Onu da söylerlerse iyi olur. Örnek çıktıyı ben bırakmıyorum test edip deneyenler bizi aydınlatsın. Ayrıca kodu kullanmak için taget iste ve proxy kısımlarını güncellemek lazımdır ona göre.
stealth eklendi önceki konuyu silmiyorum çünkü herkes duruma göre istediğini kullanır.
import json
import random
import time
from datetime import datetime
import logging
import argparse
import os
from playwright.sync_api import sync_playwright
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# Configuration
TARGET_WEBSITE = "https://google.com" # Replace with your target website
IP_DETECTION_API = "https://api.ipify.org?format=json"
OUTPUT_FILE = "visitors_v2.json"
# === ANTI-BOT GÜNCELLEMESİ 1: TUTARLI TARAYICI PARMAK İZLERİ ===
# Sadece Chromium kullanacağımız için sadece Chrome User-Agent'ları tanımladık.
# Ayrıca modern Client Hints (Sec-CH-UA) başlıklarını User-Agent ile uyumlu hale getirdik.
BROWSER_PROFILES = [
{
"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"ch_ua": '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',
"ch_platform": '"Windows"',
"ch_mobile": "?0"
},
{
"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"ch_ua": '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',
"ch_platform": '"macOS"',
"ch_mobile": "?0"
},
{
"ua": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"ch_ua": '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',
"ch_platform": '"Linux"',
"ch_mobile": "?0"
}
]
# Common viewport sizes
VIEWPORTS = [
{"width": 1920, "height": 1080}, # Full HD
{"width": 1366, "height": 768}, # Common laptop
{"width": 1440, "height": 900}, # Macbook Pro
{"width": 1536, "height": 864}, # Surface Laptop
]
# Language settings
LANGUAGES = [
"tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7",
"en-US,en;q=0.9",
"en-GB,en;q=0.9",
]
# Timezones
TIMEZONES = [
"Europe/Istanbul",
"America/New_York",
"Europe/London"
]
def validate_proxy(proxy):
if not proxy: return False
if not (proxy.startswith("http://") or proxy.startswith("https://") or proxy.startswith("socks5://")): return False
if "@" in proxy:
parts = proxy.split("@")
if len(parts) != 2: return False
if ":" not in parts[1]: return False
else:
if ":" not in proxy: return False
return True
def setup_browser_with_proxy(proxy):
playwright = None
browser = None
context = None
try:
if not validate_proxy(proxy):
logger.error(f"Invalid proxy format: {proxy}")
return None, None, None
playwright = sync_playwright().start()
proxy_config = {}
if "@" in proxy:
protocol, rest = proxy.split("://")
auth, host_port = rest.split("@")
username, password = auth.split(":")
proxy_config = {
"server": f"{protocol}://{host_port}",
"username": username,
"password": password
}
else:
proxy_config = {"server": proxy}
# === ANTI-BOT GÜNCELLEMESİ 2: CHROME ARGS (BAYRAKLAR) ===
# Otomasyon yazılımı olduğunu saklayan argümanlar eklendi
browser = playwright.chromium.launch(
headless=True,
proxy=proxy_config,
args=[
'--disable-blink-features=AutomationControlled', # AutomationControlled flag'ini gizler
'--disable-infobars',
'--no-sandbox',
'--disable-setuid-sandbox',
'--window-position=0,0',
'--ignore-certifcate-errors',
'--ignore-certifcate-errors-spki-list',
]
)
# Randomize fingerprint safely
profile = random.choice(BROWSER_PROFILES)
viewport = random.choice(VIEWPORTS)
language = random.choice(LANGUAGES)
locale = language.split(",")[0]
timezone_id = random.choice(TIMEZONES)
# === ANTI-BOT GÜNCELLEMESİ 3: DOĞRU HTTP BAŞLIKLARI (HEADERS) ===
extra_headers = {
"Accept-Language": language,
"sec-ch-ua": profile["ch_ua"],
"sec-ch-ua-mobile": profile["ch_mobile"],
"sec-ch-ua-platform": profile["ch_platform"],
"Upgrade-Insecure-Requests": "1"
}
context = browser.new_context(
user_agent=profile["ua"],
viewport=viewport,
locale=locale,
timezone_id=timezone_id,
extra_http_headers=extra_headers
)
# === ANTI-BOT GÜNCELLEMESİ 4: JAVASCRIPT GİZLENMESİ (STEALTH INIT SCRIPT) ===
# Sayfa açılır açılmaz navigator altındaki webdriver özelliklerini gizliyoruz ki
# bot scriptleri "tarayıcı headless mı?" kontrolünü geçemesin.
context.add_init_script("""
// 1. Webdriver özelliğini kaldır
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
});
// 2. Chrome objesini taklit et
window.chrome = {
runtime: {}
};
// 3. Eklentiler listesini boş olmaktan çıkar
Object.defineProperty(navigator, 'plugins', {
get: () => [1, 2, 3, 4, 5]
});
// 4. Dilleri taklit et
Object.defineProperty(navigator, 'languages', {
get: () => ['tr-TR', 'tr', 'en-US', 'en']
});
""")
logger.info(f"Browser set up with proxy {proxy.split('@')[-1] if '@' in proxy else proxy}")
return playwright, browser, context
except Exception as e:
logger.error(f"Error setting up browser with proxy: {e}")
if browser: browser.close()
if playwright: playwright.stop()
return None, None, None
def simulate_mouse_movements(page):
try:
viewport = page.viewport_size
movements = random.randint(3, 8)
for _ in range(movements):
x = random.randint(0, viewport["width"])
y = random.randint(0, viewport["height"])
duration = random.uniform(100, 500)
page.mouse.move(x, y, steps=int(duration/10))
time.sleep(random.uniform(0.1, 0.5))
logger.debug("Simulated mouse movements")
except Exception as e:
pass
def simulate_scroll_behavior(page):
try:
page_height = page.evaluate("document.body.scrollHeight")
viewport_height = page.viewport_size["height"]
if page_height > viewport_height:
scrolls = random.randint(1, 4)
for _ in range(scrolls):
current_scroll = page.evaluate("window.pageYOffset")
max_scroll = page_height - viewport_height
if random.random() < 0.7:
scroll_distance = random.randint(100, min(500, max_scroll - current_scroll + 1))
else:
scroll_distance = -random.randint(100, min(500, current_scroll + 1))
page.evaluate(f"window.scrollBy(0, {scroll_distance})")
time.sleep(random.uniform(1, 3))
except Exception as e:
pass
def simulate_click_behavior(page):
try:
if random.random() < 0.3: # Click ihtimali biraz azaltıldı
links = page.query_selector_all("a[href]")
if links:
internal_links = []
for link in links:
href = link.get_attribute("href")
if href and (not href.startswith("http") or (TARGET_WEBSITE in href)):
internal_links.append(link)
if internal_links:
random_link = random.choice(internal_links)
random_link.scroll_into_view_if_needed()
time.sleep(random.uniform(0.5, 1.5))
random_link.click()
time.sleep(random.uniform(2, 5))
page.go_back()
time.sleep(random.uniform(1, 3))
except Exception as e:
pass
def simulate_user_behavior(page):
try:
time.sleep(random.uniform(3, 6))
simulate_mouse_movements(page)
simulate_scroll_behavior(page)
simulate_click_behavior(page)
time.sleep(random.uniform(1, 3))
logger.info("Simulated user behavior")
except Exception as e:
pass
def get_public_ip(page):
try:
response = page.goto(IP_DETECTION_API)
content = response.text()
ip_data = json.loads(content)
return ip_data.get("ip")
except Exception as e:
return None
def extract_cookies(context):
try:
return context.cookies()
except Exception as e:
return []
def generate_visitor(proxy):
playwright = None
browser = None
visitor_data = {}
try:
playwright, browser, context = setup_browser_with_proxy(proxy)
if not browser or not context: return {}
page = context.new_page()
ip = get_public_ip(page)
response = page.goto(TARGET_WEBSITE, wait_until="domcontentloaded")
if not response or response.status >= 400:
logger.error(f"Failed to load target, status: {response.status if response else 'None'}")
return {}
simulate_user_behavior(page)
cookies = extract_cookies(context)
user_agent = page.evaluate("navigator.userAgent")
visitor_data = {
"proxy": proxy.split("@")[-1] if "@" in proxy else proxy,
"ip": ip,
"user_agent": user_agent,
"visit_time": datetime.now().isoformat(),
"cookies": cookies
}
logger.info(f"Generated visitor with IP {ip}")
except Exception as e:
logger.error(f"Error generating visitor: {e}")
finally:
if browser: browser.close()
if playwright: playwright.stop()
return visitor_data
def generate_visitors(count, proxies):
valid_proxies = [p for p in proxies if validate_proxy(p)]
if not valid_proxies:
logger.error("No valid proxies provided")
return []
visitors = []
for i in range(count):
proxy = valid_proxies[i % len(valid_proxies)]
logger.info(f"Generating visitor {i+1}/{count} with proxy {proxy.split('@')[-1] if '@' in proxy else proxy}")
visitor = generate_visitor(proxy)
if visitor:
visitors.append(visitor)
time.sleep(random.uniform(1, 3))
return visitors
def save_visitors(visitors, filename=OUTPUT_FILE):
try:
with open(filename, "w") as f:
json.dump(visitors, f, indent=2)
logger.info(f"Saved {len(visitors)} visitors to {filename}")
except Exception as e:
pass
def load_proxies_from_file(filename):
proxies = []
try:
with open(filename, "r") as f:
for line in f:
line = line.strip()
if line and not line.startswith("#"):
proxies.append(line)
except Exception as e:
pass
return proxies
def main():
global TARGET_WEBSITE, OUTPUT_FILE
parser = argparse.ArgumentParser(description="Generate realistic website visitors (Anti-Bot Enhanced)")
parser.add_argument("--count", type=int, default=10)
parser.add_argument("--proxies", nargs="+")
parser.add_argument("--proxy-file", type=str)
parser.add_argument("--output", type=str, default=OUTPUT_FILE)
parser.add_argument("--website", type=str, default=TARGET_WEBSITE)
args = parser.parse_args()
TARGET_WEBSITE = args.website
OUTPUT_FILE = args.output
proxies = []
if args.proxies: proxies.extend(args.proxies)
if args.proxy_file and os.path.exists(args.proxy_file):
proxies.extend(load_proxies_from_file(args.proxy_file))
if not proxies:
proxies = [
"http://kullanıcıadı:şifre@ip:port",
]
visitors = generate_visitors(args.count, proxies)
save_visitors(visitors, args.output)
if __name__ == "__main__":
main()