如何禁用页面点击功能,避免Selenium开发的网页跳转游戏用户篡改目标页面
现有Selenium方案优化
- 禁用目标页所有交互:给目标页面注入JS禁用点击事件即可,彻底解决用户点击页面搜索、超链接的问题,代码如下:
goal.execute_script("document.body.style.pointerEvents = 'none';")
- 禁用浏览器地址栏:启动Chrome时添加
--app启动参数,打开的窗口会隐藏地址栏、工具栏、导航按钮,用户无法手动输入URL跳转,启动示例:
from selenium import webdriver chrome_opt = webdriver.ChromeOptions() # 替换为你的游戏站点域名,启动后仅展示页面主体 chrome_opt.add_argument("--app=https://你的游戏站点根域名") start_point = webdriver.Chrome(options=chrome_opt)
截图校验方案评估
可行但不推荐作为核心判定逻辑。同URL页面可能存在动态内容(轮播图、个性化广告、登录态信息),很容易出现截图对比误判,且截图特征提取的性能远低于URL校验。如果担心前端路由伪装跳转,可以补充DOM特征校验:判定起始页是否存在目标页面独有的DOM元素,比截图方案准确率更高,示例:
from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException def check_is_goal_page(driver): try: # 替换为目标页面独有的元素选择器 driver.find_element(By.ID, "goal_page_unique_id") return True except NoSuchElementException: return False
PyQt5 Web方案适用性
非常适合开发这类程序,比Selenium更适配定制化网页游戏的需求,核心优势如下:
- 可完全自定义窗口控件,无需通过浏览器参数 hack 就能实现隐藏地址栏、禁用右键菜单、禁止页面缩放等定制需求
- 可以原生拦截所有页面跳转请求,只需重写
acceptNavigationRequest方法即可限制仅允许本站点的超链接跳转,彻底杜绝外部链接跳转、手动输入URL等违规操作 - 无需依赖浏览器驱动,打包分发时不会出现Selenium和浏览器版本不兼容的问题,用户使用门槛更低
PyQt5跳转拦截示例代码:
from PyQt5.QtWebEngineWidgets import QWebEnginePage from PyQt5.QtCore import QUrl class GameWebPage(QWebEnginePage): def acceptNavigationRequest(self, url: QUrl, nav_type, is_main_frame): # 仅允许本站点的跳转请求 if url.host() == "你的游戏站点域名": return True # 其余请求全部拦截 return False
内容的提问来源于stack exchange,提问作者jeff style
相关产品推荐
相关产品推荐

