web browser anti detection

This commit is contained in:
manchuwork
2025-10-03 07:19:26 +08:00
parent 84143ff6fb
commit ecf17dbf1d

View File

@@ -5,6 +5,8 @@ import json
import os
import time
import urllib.parse
from playwright.async_api import async_playwright
from playwright.sync_api import sync_playwright
@@ -16,6 +18,58 @@ class WebBrowser:
self.page = None
self.playwright = None
def human_like_actions(self):
"""更逼真的人类行为模拟"""
# 模拟页面加载后的自然浏览行为
time.sleep(random.uniform(1, 3))
# 模拟鼠标悬停
try:
hover_elements = self.page.query_selector_all("a, button")
if hover_elements:
element = random.choice(hover_elements[:min(5, len(hover_elements))])
self.page.mouse.move(0, 0) # 先移开
time.sleep(0.5)
element.hover()
time.sleep(random.uniform(0.5, 1.5))
except:
pass
def get_random_user_agent(self):
"""获取随机User-Agent"""
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
]
return random.choice(user_agents)
def enhanced_anti_detection(self):
"""增强的反检测脚本"""
self.page.add_init_script("""
// 更彻底地隐藏webdriver痕迹
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
});
// 伪装chrome csi和loadTimes
if (!window.chrome) {
window.chrome = {
runtime: {}
};
}
// 伪装permissions查询
const originalQuery = window.navigator.permissions.query;
window.navigator.permissions.query = (parameters) => {
if (parameters.name === 'notifications') {
return Promise.resolve({
state: Notification.permission
});
}
return originalQuery(parameters);
};
""")
def anti_detection(self):
"""注入更全面的反检测脚本"""
self.page.add_init_script("""
@@ -122,6 +176,27 @@ class WebBrowser:
except:
return False
def start_browser_with_proxy(self, proxy_host=None, proxy_port=None):
"""启动带代理的浏览器"""
self.init_cookie_file()
browser_args = [
"--disable-blink-features=AutomationControlled",
"--disable-infobars",
"--no-sandbox",
"--disable-dev-shm-usage"
]
if proxy_host and proxy_port:
browser_args.append(f"--proxy-server=http://{proxy_host}:{proxy_port}")
self.playwright = sync_playwright().start()
self.browser = self.playwright.chromium.launch(
headless=False,
args=browser_args
)
# ... 其余初始化代码
def bypass_debugger(self):
"""绕过调试器检测"""
self.page.add_init_script("""
@@ -188,10 +263,12 @@ class WebBrowser:
)
self.page = self.context.new_page()
self.anti_detection()
self.enhanced_anti_detection()
# 立即执行一次反检测
self.page.evaluate("""
delete navigator.__proto__.webdriver;
""")
self.human_like_actions()
self.random_behavior()
def close_browser(self):
@@ -243,7 +320,9 @@ class WebBrowser:
self.page.evaluate("""
delete navigator.__proto__.webdriver;
""")
self.page.wait_for_load_state("networkidle")
self.human_like_actions()
self.random_behavior()
return True
except Exception as e: