本文主要讲述
1、selenium与真正浏览器的区别
2、模拟方法
selenium打开chrome或者firefox或者其他浏览器,与其真正浏览器不同的是加载参数(站在需要模拟浏览器进行自动化的方面)。
所以经常看到的是加载参数有headless、disable-infobars、ignore-certificate-errors.....
selenium其实并不能通过很多对真正浏览器的校验。
最常用的是window.navigator.webdriver 在浏览器里面一般是
而当你不加参数,则window.navigator.webdriver默认为true
可以追寻到https://github.com/chromium/chromium/blob/master/third_party/blink/renderer/core/frame/navigator.h
还有js chromium/chrome/test/chromedriver/js/call_function.js
默认这个名字
1、针对window.navigator.webdriver 这个问题
2、js可以混淆参数 名字重命名 可以打开webdriver.exe(我这边是谷歌chromedriver.exe) 用文本编译器打开直接替换
3、改源码重新编译(目前卡在同步源码中,如果可以提供优质的国外代理或者感兴趣可以加群,一起编译下chromium源码)
参考https://juejin.im/post/5c62b6d5f265da2dab17ae3c
chromedriver 支持的参数
https://github.com/chromium/chromium/blob/d925e7f357d93b95631c22c47e2cc93b093dacc5/content/public/common/content_switches.cc
// canvas2D的MSAA样本数。需要GPU支持MSAA
//有效果 0禁用MSAA。
const char kAcceleratedCanvas2dMSAASampleCount [] = “ canvas-msaa-sample-count ” ;
//默认情况下,file:// URIs无法读取其他文件:// URI。这是个
//覆盖需要旧行为进行测试的开发人员。
const char kAllowFileAccessFromFiles [] = “ allow-file-access-from-files ” ;
//允许忽略localhost上的TLS / SSL错误(无插页式,
//没有阻止请求)。
const char kAllowInsecureLocalhost [] = “ allow-insecure-localhost ” ;
//允许在网络列表中添加环回接口以进行对等连接。
const char kAllowLoopbackInPeerConnection [] =
“ allow-loopback-in-peer-connection ” ;
//在linux上使用android SkFontManager。指定的目录应该
//包含名为“fonts.xml”的配置xml文件。
//这在blimp中用于在linux上模拟android字体。
const char kAndroidFontsPath [] = “ android-fonts-path ” ;
//设置闪烁设置。格式为 [= [= ],...
//名称在Settings.json5中声明。对于布尔类型,使用“true”,
// “false”,或省略'= '部分设置为true。对于枚举类型,请使用int
//枚举值的值。在其他命令行标志和prefs之后应用。
const char kBlinkSettings [] = “ blink-settings ” ;
//导致浏览器进程在启动时崩溃。
const char kBrowserCrashTest [] = “ crash-test ” ;
//使浏览器进程在启动时显示对话框。
const char kBrowserStartupDialog [] = “ browser-startup-dialog ” ;
//为渲染器和插件子进程运行的exe的路径。
const char kBrowserSubprocessPath [] = “ browser- subprocess -path ” ;
//判断代码是否正在运行浏览器测试(这会更改启动URL
//由内容shell使用,并且还禁用可以进行测试的功能
//片状[像监测记忆压力])。
const char kBrowserTest [] = “ browser-test ” ;
//设置合成图层使用的图块大小。
const char kDefaultTileWidth [] = “ default-tile-width ” ;
const char kDefaultTileHeight [] = “ default-tile-height ” ;
//在2d画布上禁用抗锯齿功能。
const char kDisable2dCanvasAntialiasing [] = “ disable-canvas-aa ” ;
//禁用Canvas2D渲染到扫描输出缓冲区以进行叠加支持。
const char kDisable2dCanvasImageChromium [] = “ disable-2d-canvas-image-chromium ” ;
//禁用客户端可见的3D API,特别是WebGL和Pepper 3D。
//这由政策控制,与其他政策分开
//启用/禁用开关以避免意外退回策略
//支持控制对这些API的访问。
const char kDisable3DAPIs [] = “ disable-3d-apis ” ;
//禁用gpu-accelerated 2d画布。
const char kDisableAccelerated2dCanvas [] = “ disable-accelerated-2d-canvas ” ;
//禁用视频解码的硬件加速(如果可用)。
const char kDisableAcceleratedVideoDecode [] =
“禁用加速视频解码” ;
//禁用视频编码的硬件加速(如果可用)。
const char kDisableAcceleratedVideoEncode [] =
“禁用加速视频编码” ;
//禁用后备存储数量限制。可以防止闪烁
//拥有许多窗口/标签和大量内存的用户
const char kDisableBackingStoreLimit [] = “ disable-backing-store-limit ” ;
//禁用被遮挡窗口的背景渲染。完成测试以避免
//非确定性行为
const char kDisableBackgroundingOccludedWindowsForTesting [] =
“ disable-backgrounding-occluded-windows ” ;
//从后台页面禁用任务限制计时器任务。
const char kDisableBackgroundTimerThrottling [] =
“ disable-background-timer-throttling ” ;
//禁用一个或多个启用Blink运行时的功能。
//使用来自runtime_enabled_features.json5的名称,以逗号分隔。
//在kEnableBlinkFeatures之后应用,并在更改这些之后的其他标志之后应用
//功能
const char kDisableBlinkFeatures [] = “ disable-blink-features ” ;
//启用Web蓝牙扫描
//此开关无需任何操作即可启用Web蓝牙扫描
//用于测试的权限提示。
const char kEnableWebBluetoothScanning [] = “ enable-web-bluetooth-scanning ” ;
//在浏览器测试中禁用合成器Ukm记录。
// TODO(khushalsagar):删除一次crbug.com/761524即可解决。
const char kDisableCompositorUkmForTests [] = “ disable-compositor-ukm-for-tests ” ;
//禁用HTML5数据库支持。
const char kDisableDatabases [] = “ disable-databases ” ;
//在GPU重置后禁用3D API的每域阻止。
//此开关仅用于测试。
const char kDisableDomainBlockingFor3DAPIs [] =
“ disable-domain-blocking-for-3d-apis ” ;
//禁用所有版本的WebGL。
const char kDisableWebGL [] = “ disable-webgl ” ;
//禁用WebGL2。
const char kDisableWebGL2 [] = “ disable-webgl2 ” ;
//禁用FileSystem API。
const char kDisableFileSystem [] = “ disable-file-system ” ;
//在挡板内禁用3D。
const char kDisableFlash3d [] = “ disable-flash-3d ” ;
//在挡板内禁用Stage3D。
const char kDisableFlashStage3d [] = “ disable-flash-stage3d ” ;
//禁用演示文稿的用户手势要求。
const char kDisableGestureRequirementForPresentation [] =
“ disable-gesture-requirement-for-presentation ” ;
//禁用GPU硬件加速。如果软件渲染器不到位,
//然后GPU进程将无法启动。
const char kDisableGpu [] = “ disable-gpu ” ;
//阻止合成器使用其GPU实现。
const char kDisableGpuCompositing [] = “ disable-gpu-compositing ” ;
//禁用GPU进程的主动早期初始化。
const char kDisableGpuEarlyInit [] = “ disable-gpu-early-init ” ;
//不要强制所有合成器资源都由GPU内存缓冲区支持。
const char kDisableGpuMemoryBufferCompositorResources [] =
“ disable-gpu-memory-buffer-compositor-resources ” ;
//禁用GpuMemoryBuffer支持的VideoFrames。
const char kDisableGpuMemoryBufferVideoFrames [] =
“ disable-gpu-memory-buffer-video-frames ” ;
//对于测试,禁用GPU进程的次数限制
//重启。
const char kDisableGpuProcessCrashLimit [] = “ disable-gpu-process-crash-limit ” ;
//使用CPU光栅化时禁用低分辨率平铺。这用
//更少的力量,特别是在动画期间,但可能会看到更多的白色
//在快速滚动期间,特别是在较慢的设备上。
const char kDisableLowResTiling [] = “ disable-low-res-tiling ” ;
//如果停止响应,请禁用崩溃GPU进程的线程
//消息
const char kDisableGpuWatchdog [] = “ disable-gpu-watchdog ” ;
//禁止将图像动画重置为开头以避免跳过
//很多帧 仅在启用合成器图像动画时才有效。
const char kDisableImageAnimationResync [] = “ disable-image-animation-resync ” ;
//禁用IPC泛洪保护。
//它默认激活。一些javascript函数可用于泛洪
//使用IPC的浏览器进程 这种保护限制了它们的速率
//可以使用
const char kDisableIpcFloodingProtection [] = “ disable-ipc-flooding-protection ” ;
//禁止在渲染器进程中挂起监视器对话框。这可能会缓慢
//在页面上卸载处理程序以防止选项卡关闭,但是任务
//在这种情况下,Manager可用于终止违规进程。
const char kDisableHangMonitor [] = “ disable-hang-monitor ” ;
//禁用RenderThread的HistogramCustomizer。
const char kDisableHistogramCustomizer [] = “ disable-histogram-customizer ” ;
//发送错误的IPC消息时不要杀死子进程。距离
//从测试开始,从安全角度来看,这是一个糟糕的主意
//这个开关
const char kDisableKillAfterBadIPC [] = “ disable-kill-after-bad-ipc ” ;
//禁用LCD文本。
const char kDisableLCDText [] = “ disable-lcd-text ” ;
//禁用LocalStorage。
const char kDisableLocalStorage [] = “ disable-local-storage ” ;
//强制禁用日志记录。默认情况下,在调试中启用日志记录
//构建。
const char kDisableLogging [] = “ disable-logging ” ;
//在创建DXVA解码器时禁用CODECAPI_AVLowLatencyMode。
const char kDisableLowLatencyDxva [] = “ disable-low-latency-dxva ” ;
//禁用在渲染器未提交时清除渲染输出
//顶层导航后的新输出一段时间。
const char kDisableNewContentRenderingTimeout [] =
“ disable-new-content-rendering-timeout ” ;
//禁用Web通知和推送API。
const char kDisableNotifications [] = “禁用通知” ;
//在渲染器中禁用部分栅格。禁用此开关也会禁用
//使用持久性gpu内存缓冲区。
const char kDisablePartialRaster [] = “ disable-partial-raster ” ;
//在渲染器中启用部分栅格。
const char kEnablePartialRaster [] = “ enable-partial-raster ” ;
//禁用Pepper3D。
const char kDisablePepper3d [] = “ disable-pepper-3d ” ;
//禁用权限API。
const char kDisablePermissionsAPI [] = “ disable-permissions-api ” ;
//禁用Pepper 3d的图像Chromium。
const char kDisablePepper3DImageChromium [] = “ disable-pepper-3d-image-chromium ” ;
//禁用合成器加速的触摸屏捏合手势。
const char kDisablePinch [] = “ disable-pinch ” ;
//禁止创建合成图层时会阻止LCD文本。
const char kDisablePreferCompositingToLCDText [] =
“ disable-prefer-compositing-to-lcd-text ” ;
//禁用Presentation API。
const char kDisablePresentationAPI [] = “ disable-presentation-api ” ;
//禁用history.pushState / replaceState调用的限制。
const char kDisablePushStateThrottle [] = “ disable-pushstate-throttle ” ;
//禁用RGBA_4444纹理。
const char kDisableRGBA4444Textures [] = “ disable-rgba-4444-textures ” ;
//无论原点如何,都会污染所有