当前位置:网站首页>selenium webdriver 防爬问题 C#
selenium webdriver 防爬问题 C#
2022-08-04 05:33:00 【wenshanshan0824】
一、常见的方法是使用如下配置解决window.navigator.webdriver属性值问题,确实有用,有些网站正常可以打开,selenium中打不开,或者返回错误,可以试下
options.AddArgument("--disable-blink-features=AutomationControlled");再进阶点,利用浏览器端开发霸权强制写入一段js,修改变量值window.navigator.webdriver
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})二、我遇到的问题比较奇葩,第一次可以打开,一旦使用driver.findxxx(),或者driver.getxx()之后就会触发反爬策略,症状就是之后任何请求都会报错,具体原因没搞清楚。但是,f12执行js是不会导致以上情况。基于f12无问题的原则,翻了chrome dev tools的开发文档:
Chrome DevTools Protocol - Runtime domain
发现有一个可以执行js的接口,而且还可以有接收返回值,奈何资料实在太少,好不容易跑通,执行了个alert没有触发,代码如下
( C#代码,注意引用最新版webdriver,nuget搜selenium前两个)
string path = AppDomain.CurrentDomain.BaseDirectory + "/test.js";
string str2 = File.ReadAllText(path);
//没找到怎么传参, 用这个low方法把
str2 = str2.Replace("_name_", name);
//log("注入的js代码:" + str2);
p.Add("expression", str2);
//调用Runtime.evaluate,传入p执行
driver.ExecuteCdpCommand("Runtime.evaluate", p);(js代码)
alert(1);三、继续尝试如何接收返回值,毕竟要爬东西。
(C#)
string path = AppDomain.CurrentDomain.BaseDirectory + "/test2.js";
string str2 = File.ReadAllText(path);
p.Add("expression", str2);//代码
p.Add("returnByValue", true);//接收返回值【注意,js中return必须是json格式,不然收不到!!!】
p.Add("awaitPromise", true);//是否异步
//执行,并接收返回值
Dictionary<string, Object> r =(Dictionary<string,Object>)driver.ExecuteCdpCommand("Runtime.evaluate", p);(js:匿名函数,直接执行,【同步返回】)
(function(){
return {a:1}
})();(js:匿名函数,异步返回)
(async function(){
return new Promise((resolve, reject) => {
resolve({a:1});
});
})();over,能写js,随时随地执行,能传参,能接返回值,还能异步,还有什么做不了的呢?
边栏推荐
- 用PPAPI插件技术在Web上显示会议视频、桌面、PPT等
- 结构体内存对齐-C语言
- [开发杂项][调试]debug into kernel
- [Development miscellaneous][Debug]debug into kernel
- 基于Webrtc和Janus的多人视频会议系统开发7 - publish和subscribe声音设备冲突导致对方听不到声音
- Design and implementation of legal aid platform based on asp.net (with project link)
- win10下mediasoup搭建过程中的一些坑记录
- Object. RequireNonNull method
- An abstract class, internal classes and interfaces
- 学好网络安全看这篇文章让你少走弯路
猜你喜欢
随机推荐
并发概念基础:线程,死锁
counting cycle
Pipe redirection
JUC并发容器——阻塞队列
【c语言】整数的二进制表现形式是什么?
使用cef离屏渲染技术实现在线教育课件和webrtc视频回放融合录制
20170729
通用解决端口占用问题
抽象类、内部类和接口
Completely remove MySQL tutorial
学好网络安全看这篇文章让你少走弯路
C语言对文件的操作(完整版)
Treating as key frame since WebRTC-SpsPpsIdrIsH264Keyframe is disabled 解决
JVM三大常量池与方法区
webrtc代码解读一:音频数据的接收解码播放过程
虚幻引擎 5 完整指南[2022六月最新课程学习内容]
file editor
通过socks5代理下载webrtc源码错误:curl: (7) Can't complete SOCKS5 connection xx.xx.xx.xx
Stream API
C语言结构体(必须掌握版)









