Selenium 点击后页面白屏的解决方案:绕过前端反爬与 bot 检测

浅强同学_9434

浅强同学_9434

2026-09-08

244人浏览

原创

Selenium 点击后页面白屏的解决方案:绕过前端反爬与 bot 检测

本文详解 selenium webdriver 在点击跳转按钮后出现白屏(url 已变更但内容未渲染)的典型原因及实战对策,涵盖 undetected-chromedriver、javascript 原生点击、人机行为模拟等关键手段。

本文详解 selenium webdriver 在点击跳转按钮后出现白屏(url 已变更但内容未渲染)的典型原因及实战对策,涵盖 undetected-chromedriver、javascript 原生点击、人机行为模拟等关键手段。

当使用 Selenium 点击按钮后浏览器 URL 正确跳转,但页面持续显示空白(白屏),而直接通过 driver.get(url) 访问目标页却能正常加载——这几乎可以确定是网站前端实施了主动式 bot 检测机制,而非简单的元素定位或等待问题。Lebara.nl 等现代电商站点常集成 OneTrust、Cloudflare 或自研 JS 挑战脚本,会监听 WebDriver 特征(如 navigator.webdriver 属性)、鼠标轨迹、点击事件触发方式(click() vs dispatchEvent)、甚至页面渲染时序,一旦检测到非人类行为,便阻断 React/Vue 应用初始化,导致 SPA 白屏。

✅ 核心解决策略

以下方案需组合使用,单一措施往往失效:

1. 替换为 undetected-chromedriver

标准 webdriver.Chrome() 会暴露大量自动化指纹(如 cdc_ 变量、navigator.webdriver === true)。undetected-chromedriver(v3+)自动注入补丁,隐藏 WebDriver 特征并模拟真实 Chrome 实例:

pip install undetected-chromedriver
import undetected_chromedriver as uc

options = uc.ChromeOptions()
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
# 可选:禁用图片提升加载速度(不影响检测)
# options.add_argument("--blink-settings=imagesEnabled=false")

driver = uc.Chrome(options=options)

2. 强制使用 JavaScript 点击(绕过事件监听器拦截)

部分网站会拦截 .click() 触发的原生事件(如阻止 MouseEvent 或重写 button.onclick)。改用 execute_script 直接调用 DOM 元素的 click() 方法,更接近真实用户触发:

# ✅ 推荐:JS 点击(绕过前端事件劫持)
bestel_button = driver.find_element(By.XPATH, "//button[contains(text(), 'Bestel') or contains(@aria-label, 'simkaart')]")
driver.execute_script("arguments[0].click();", bestel_button)

⚠️ 注意:避免硬编码绝对 XPath(如 /html/body/div[2]/...),它极易因页面微调而失效。优先使用语义化定位,例如 By.XPATH, "//button[contains(@class, 'bestel')]" 或 By.CSS_SELECTOR, "button[data-testid='order-sim-button']"。

PigX UI 前端开发
PigX UI 前端开发

PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。

下载

3. 模拟人类交互节奏

添加随机延迟 + 鼠标扰动可降低行为异常分:

import time
import random
import pyautogui

def human_delay(min_sec=1.0, max_sec=3.5):
    time.sleep(random.uniform(min_sec, max_sec))

def human_move():
    x, y = random.randint(200, 800), random.randint(150, 600)
    pyautogui.moveTo(x, y, duration=random.uniform(0.3, 0.8))

# 使用示例
human_delay(1, 2)
human_move()
cookie_btn.click()
human_delay(1.5, 3)

4. 关键等待:不依赖 time.sleep()

白屏常因 JS 应用未完成 hydration 导致。应等待目标页面核心元素(如 <main></main>、特定标题或加载指示器)出现,而非固定延时:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待新页面的主内容区域加载(例如 Lebara 的产品标题)
try:
    WebDriverWait(driver, 15).until(
        EC.presence_of_element_located((By.XPATH, "//h1[contains(text(), 'Simkaart')]"))
    )
    print("✅ 新页面已成功渲染")
except TimeoutException:
    print("❌ 页面超时未加载,可能仍被拦截")

? 最佳实践总结

问题类型 推荐方案 说明
URL跳转但白屏 undetected-chromedriver + JS点击 根本性规避指纹检测与事件拦截
定位不稳定 使用 contains(text(), ...) 或 @data-* 属性 避免绝对 XPath,提高鲁棒性
页面加载卡顿 WebDriverWait + presence_of_element_located 替代 time.sleep(),精准等待业务元素而非固定时间
需要更高隐蔽性 添加 --disable-blink-features=AutomationControlled 启动参数 配合 undetected-chromedriver 进一步隐藏自动化痕迹

? 终极提示:若上述方法仍失败,可尝试在点击后立即执行 driver.execute_script("return window.performance.getEntriesByType('navigation')[0].domComplete") 检查 DOM 是否真正就绪;或捕获控制台错误(driver.get_log("browser"))定位 JS 报错根源——白屏往往是前端框架启动失败所致。

通过融合无痕驱动、行为模拟与精准等待,绝大多数“点击跳转白屏”问题均可稳定解决。记住:现代反爬对抗的本质,是让自动化行为无限趋近于真实用户,而非单纯绕过某一条检测规则。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

前端

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2423

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5243

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6290

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5858

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

843

5

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1711

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4364

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1689

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

25517

23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程