Kod çeşitli manipülasyon yöntemleriyle tarayıcıyı olabildiğince unique hale getirmeye çalışıyor. Artık geliştirmek, bir şeyler eklemek veya çıkarmak size kalmış. Ben bu haline kadar getirebildim ve şu anda işime yarıyor.
Bazen fingerprint testinde kötü sonuç alabiliyorsunuz. Ama kapatıp açınca her şey randomize olduğu için yüksek ihtimalle düzeliyor. Bu durumu atlamak için de tarayıcı açılmadan önce bir request ile fingerprint sağlığınızı kontrol edebileceğiniz bir fonksiyon eklerseniz her seferinde garanti temiz başlarsınız. Benim kullanım amacım bu kadar kapsamlı gizlilik istemediğinden bu hali bana yeterli ve böyle bir şey eklemedim.
User-Agent, dil ayarları, canvas fingerprint, WebGL ve WebRTC ayarları gibi bir dizi parametreyi rastgele değiştirir.
Tarayıcı istekleri için kullanılan header'ları rastgele seçilen User-Agent, Accept-Language ve Referer ile değiştirir
Sıradan çinko tarayıcı ; Undetected Browser
Selenium, undetected_chromedriver ve fake_useragent kullanılarak yazıldı.
Hangi adımda ne yaptığı yeterince açık olsa da yorum satırlarıyla biraz daha açıklama eklendi.
import random
from selenium import webdriver
from undetected_chromedriver import Chrome, ChromeOptions
from fake_useragent import UserAgent
# urllerin listesi (içinden bir taneyi rastgele seçer ve bunu açar)
urls = [
"https://linkiniz/1",
"https://linkiniz/2",
"https://linkiniz/3"
]
selected_url = random.choice(urls)
chrome_options = ChromeOptions()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
driver = Chrome(options=chrome_options)
# random useragent
user_agent = UserAgent().random
language = "en-US,en;q=0.9,tr;q=0.8"
accept_language = "en-US,en;q=0.9,tr;q=0.8"
# dil değiştir
driver.execute_cdp_cmd("Network.setUserAgentOverride", {"userAgent": user_agent, "language": language})
driver.execute_script("Object.defineProperty(navigator, 'language', {value: arguments[0]});", language)
driver.execute_script("Object.defineProperty(navigator, 'languages', {get: function() {return %s}});" % accept_language)
# nav property değişiklikleri
js_code = (
"const originalNavigator = window.navigator;"
"window.navigator = Object.create(originalNavigator, {"
" webdriver: {value: undefined},"
" platform: {value: 'Win32'},"
" appCodeName: {value: 'Mozilla'},"
" oscpu: {value: 'Windows NT 10.0; Win64; x64'}"
"});"
)
driver.execute_script(js_code)
# webgl değişiklikleri
webgl_code = (
"const getParameter = WebGLRenderingContext.prototype.getParameter;"
"WebGLRenderingContext.prototype.getParameter = function(parameter) {"
"if (parameter === 37445) {return 'Intel Open Source Technology Center';}"
"if (parameter === 37446) {return 'Mesa DRI Intel(R) Ivybridge Mobile ';}"
"return getParameter.apply(this, arguments);"
"};"
)
driver.execute_script(webgl_code)
# canvas fingerprint değişiklikleri
canvas_code = (
"HTMLCanvasElement.prototype.toDataURL = function() { return 'data:image/png;base64,12345'; };"
"HTMLCanvasElement.prototype.toBlob = function() { return new Blob([''], {type: 'image/png'}); };"
)
driver.execute_script(canvas_code)
# webrtc kapatma
rtc_code = (
"var get = Object.getOwnPropertyDescriptor(MediaStreamTrack.prototype, 'enabled').get;"
"Object.defineProperty(MediaStreamTrack.prototype, 'enabled', {get: function() {return false;}});"
)
driver.execute_script(rtc_code)
# çözünürlük
driver.set_window_size(1920, 1080)
driver.set_window_position(0, 0)
# header randomize
headers = {
"User-Agent": user_agent,
"Accept-Language": accept_language,
"Referer": "https://www.google.com/" # referer i değiştirebilirsiniz.
}
driver.request_interceptor = lambda request: request.update(headers=headers)
# linke git
driver.get(selected_url)
input("Tarayıcıyı kapatmak için Enter tuşuna basın...")
driver.quit()
Not: Bu proje eğitim veya test amaçları için tasarlanmıştır ve etiketleme, analitik izleme ve bot otomasyonu gibi durumlar için kullanılması önerilmez. Yasalara ve etik kurallara uymak önemlidir.