从头学习爬虫(四十二)高阶篇----模拟真正浏览器的selenium

本文主要讲述

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 ” ;

//设置闪烁设置。格式为<name> [= <value],<name> [= <value>],...
//名称在Settings.json5中声明。对于布尔类型,使用“true”,
// “false”,或省略'= <value>'部分设置为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光栅化时禁用低分辨率平铺。这用
//更少的力量,特别是在动画期间,但可能会看到更多的白色
//在快速
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值