更改WebBrowser控件的用户代理
[DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
private static extern int UrlMkSetSessionOption(int dwOption, string pBuffer, int dwBufferLength, int dwReserved);const int URLMON_OPTION_USERAGENT = 0x10000001;public void ChangeUserAgent()
{List<string> userAgent = new List<string>();string ua = "Googlebot/2.1 (+http://www.google.com/bot.html)";UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0);
}
唯一的问题是这只能工作一次。当我尝试第二次运行ChangeUserAgent()方法时,它不起作用。它保持设置为第一个更改的值。这很烦人,我已经尝试了一切,但它不会改变不止一次。 有谁知道一种不同的,更灵活的方法? 谢谢
4 个回复
为陡土
public class ExtendedWebBrowser : WebBrowser
{bool renavigating = false;public string UserAgent { get; set; }public ExtendedWebBrowser(){DocumentCompleted += SetupBrowser;//this will cause SetupBrowser to run (we need a document object)Navigate("about:blank");}void SetupBrowser(object sender, WebBrowserDocumentCompletedEventArgs e){DocumentCompleted -= SetupBrowser;SHDocVw.WebBrowser xBrowser = (SHDocVw.WebBrowser)ActiveXInstance;xBrowser.BeforeNavigate2 += BeforeNavigate;DocumentCompleted += PageLoaded;}void PageLoaded(object sender, WebBrowserDocumentCompletedEventArgs e){}void BeforeNavigate(object pDisp, ref object url, ref object flags, ref object targetFrameName,ref object postData, ref object headers, ref bool cancel){if (!string.IsNullOrEmpty(UserAgent)){if (!renavigating){headers += string.Format("User-Agent: {0}rn", UserAgent);renavigating = true;cancel = true;Navigate((string)url, (string)targetFrameName, (byte[])postData, (string)headers);}else{renavigating = false;}}}
}
注意:要使用上述方法,您需要向“Microsoft Internet Controls”添加COM引用。 他也提到了你的方法,并声明WebBrowser控件似乎缓存了这个用户代理字符串,因此它不会在不重新启动进程的情况下更改用户代理。
佬棠
webBrowser.Navigate("http://localhost/run.php", null, null,"User-Agent: Here Put The User Agent");
才脊烽馈低
[DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
private static extern int UrlMkSetSessionOption(int dwOption, string pBuffer, int dwBufferLength, int dwReserved);const int URLMON_OPTION_USERAGENT = 0x10000001;
const int URLMON_OPTION_USERAGENT_REFRESH = 0x10000002;public void ChangeUserAgent()
{string ua = "Googlebot/2.1 (+http://www.google.com/bot.html)";UrlMkSetSessionOption(URLMON_OPTION_USERAGENT_REFRESH, null, 0, 0);UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0);
}
呕蹿尉
void BeforeNavigate(object pDisp, ref object url, ref object flags, ref object targetFrameName,ref object postData, ref object headers, ref bool cancel)
{// This alone is sufficient, because headers is a "Ref" parameters, and the browser seems to pick this back up.headers += string.Format("User-Agent: {0}rn", UserAgent);
}
这个解决方案最适合我。使用renavigating给我带来了其他奇怪的问题,比如浏览器内容突然消失,有时仍然得到不支持的浏览器。使用这种技术,Fiddler中的所有请求都具有正确的用户代理。
更改WebBrowser控件的用户代理相关推荐
- C# webbrowser控件点击页面按钮
用金山快盘时需要每天签到挣空间容量,一直都想写个定时程序实现,然后挂到实验室的服务器上.通过参考网上一些资料,自己动手实现一个利用webbrowser控件实现了自动点击网页按钮的功能,其实很简单的,下 ...
- [JavaScript]WebBrowser控件下IE版本的检测
转载请注明原文地址:https://www.cnblogs.com/litou/p/10772272.htm 在客户端检查用户使用的浏览器类型和版本,都是根据navigator.userAgent属性 ...
- 强制IE浏览器或WebBrowser控件使用指定版本显示网页
最近为了抓取淘宝的成交数据,用C#的WebBrowser控件开发了一个简单的程序. 发现WebBrowser控件默认使用的版本是IE7的兼容模式.而淘宝的宝贝详细页居然对IE7的支持不是很好. 成交记 ...
- WebBrowser控件使用技巧分享
原文地址为: WebBrowser控件使用技巧分享 在发布"淘宝登货员"时发现不少朋友对WebBrowser控件比较感兴趣,故在此分享一下使用心得. 首先分享一个WebBrowse ...
- 【转载】c#多线程使用webbrowser控件
本来打算在完成事件中分析页面的,可是郁闷了半天,根本就没有完成处理函数的调用,搜索得到解决,在此感谢原文作者http://www.soaspx.com/dotnet/csharp/csharp_201 ...
- WebBrowser控件参数解释
方法 说明 GoBack '相当于IE的"后退"按钮,使你在当前历史列表中后退一项 GoForward ' 相当于IE的"前进"按钮,使你在当前历史列表中前进一 ...
- c#中WebBrowser控件的使用方法
首先先来简单介绍一下webbrowser控件,这个控件是可以实现在form窗体中添加网页内容的.如图,我在form中加入了百度api,(百度地图api调用博客里有讲) 使用这个控件其实很简单 (1)第 ...
- 【WPF】监听WPF的WebBrowser控件弹出新窗口的事件
WPF中自带一个WebBrowser控件,当我们使用它打开一个网页,例如百度,然后点击它其中的链接时,如果这个链接是会弹出一个新窗口的,那么它会生生的弹出一个IE窗口来,而不是在内部跳到该链接. 如果 ...
- WebBrowser控件判断完全加载中DocumentCompleted和Navigated的关系
WebBrowser控件判断完全加载使用DocumentCompleted是有问题的,所以有人提出可以使用判断DocumentCompleted的次数和Navigated次数完全相等的方法判断是否完全 ...
最新文章
- Linux的常用命令!
- 时空AI技术:深度强化学习在智能城市领域应时空AI技术:深度强化学习在智能城市领域应用介绍...
- golang time 时间 加减法
- python input与返回值-python中使用input()函数获取用户输入值方式
- C语言遥控器程序,红外遥控
- 牛客网【每日一题】4月2日 月月查华华的手机
- html下移,jQuery实现元素的上移下移删除
- 12306 被质疑过度获取用户隐私,不授权还买不了票
- 计算机操作系统(第四版)第二章 习题答案
- 2021-11-12 应用密码学:协议、算法与C源程序(目录)
- android 横屏录制视频,MediaRecorder怎么在竖屏的时候录像结果是横屏录的结果
- 打开网络连接三种方法
- 旷视科技面试——算法岗
- 模拟城市我是市长服务器维护多久,《模拟城市我是市长》你所走过的弯路 新手常见问题...
- Nice UI - Hacked.io
- 使用Java导出Excel表格并由浏览器直接下载——基于POI框架
- python猫抓老鼠_利用python如何实现猫捉老鼠小游戏
- LeetCode每日一题——904. 水果成篮
- linux添加fcitx输入法,Ubuntu下轻松安装FCITX输入法
- 13场院士报告推动2022中国种子大会 国稻种芯百团计划行动
热门文章
- OpenCV长方形squares探测器的实例(附完整代码)
- Qt for VxWorks
- OpenGL linesmooth线平滑的实例
- 经典C语言程序100例之六一
- python max函数_使用'key'和lambda表达式的python max函数
- android 帐户管理,Android开发之帐户管理
- 单片机独立式按键c语言程序,(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询)...
- 递归实现10进制转8进制,字符串数字互转,判断数组正逆向
- Opencms安装和配置
- 线性代数之矩阵逆的微分