C#爬虫-Selenium ChromeDriver 设置代理

背景

开发爬虫程序,如果不做代理设置,本机的外网IP很容易被网站封掉,导致不能持续进行数据抓取。而Selenium作为动态网页抓取的利器,我们有必要了解一下,如何对它进行代理设置,并正常访问网页。

解决办法

1、首先申请代理ip,正常付费的才比较靠谱。这其中包括账号、密码。

private string proxy_Host = "域名地址";private int proxy_Post = 端口;private string proxy_UserName = "账号";private string proxy_PassWord = "密码";private string proxy_CheckURL = "检查是否正常的地址";private string Ex_Proxy_Name = "proxy.zip";

2、设置chrome background.js、manifest.json

private bool Rebuild_Extension_Proxy(string proxy_UserName, string proxy_PassWord){bool result = false;FileStream zipToOpen = null;ZipArchive archive = null;ZipArchiveEntry readmeEntry = null;StreamWriter writer = null;string background = "";string manifest = "";try{background = @"var Global = {currentProxyAouth:{username: '',password: ''}}Global.currentProxyAouth = {username: '" + proxy_UserName + @"',password: '" + proxy_PassWord + @"'}chrome.webRequest.onAuthRequired.addListener(function(details, callbackFn) {console.log('onAuthRequired >>>: ', details, callbackFn);callbackFn({authCredentials: Global.currentProxyAouth});}, {urls: [""<all_urls>""]}, [""asyncBlocking""]);chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {console.log('Background recieved a message: ', request);POPUP_PARAMS = {};if (request.command && requestHandler[request.command])requestHandler[request.command] (request);});";manifest = @"{""version"": ""1.0.0"",""manifest_version"": 2,""name"": ""Chrome Proxy"",""permissions"": [""proxy"",""tabs"",""unlimitedStorage"",""storage"",""<all_urls>"",""webRequest"",""webRequestBlocking""],""background"": {""scripts"": [""background.js""]},""minimum_chrome_version"":""22.0.0""}";zipToOpen = new FileStream(System.Environment.CurrentDirectory + "\\" + Ex_Proxy_Name, FileMode.Create);archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update);readmeEntry = archive.CreateEntry("background.js");writer = new StreamWriter(readmeEntry.Open());writer.WriteLine(background);writer.Close();readmeEntry = archive.CreateEntry("manifest.json");writer = new StreamWriter(readmeEntry.Open());writer.WriteLine(manifest);writer.Close();result = true;}catch (Exception ex){result = false;}finally{if (writer != null) { writer.Close(); writer.Dispose(); writer = null; }if (readmeEntry != null) { readmeEntry = null; }if (archive != null) { archive.Dispose(); archive = null; }if (zipToOpen != null) { zipToOpen.Close(); zipToOpen.Dispose(); zipToOpen = null; }}return result;}

3、Chrome Driver使用代理Proxy

// 設置 Chrome Driver Exyension Proxy 設定bool isproxysetting = true;if (_isuseproxy){isproxysetting = Rebuild_Extension_Proxy(proxy_UserName, proxy_PassWord);}if (isproxysetting){// Driver 設定options = new ChromeOptions();if (_isuseproxy){options.Proxy = null;options.AddArguments("--proxy-server=" + proxy_Host + ":" + proxy_Post.ToString());options.AddExtension(Ex_Proxy_Name);}

4、测试一下我们的设置

private Proxy_Unit.ProxyIPInfo Get_ProxyIPInfo(string Html_Content){Proxy_Unit.ProxyIPInfo result = null;try{result = new Proxy_Unit.ProxyIPInfo();Html_Content = Html_Content.Replace("<html><head></head><body><pre style=\"word-wrap: break-word; white-space: pre-wrap;\">", "");Html_Content = Html_Content.Replace("</pre></body></html>", "");if (!Html_Content.Contains("proxy error")){result = JsonConvert.DeserializeObject<Proxy_Unit.ProxyIPInfo>(Html_Content);}else{result = null;}}catch (Exception ex){result = null;}return result;}

测试效果

成功,达到预期效果

{"ip":"213.182.205.185","country":"IS","asn":{"asnum":9009,"org_name":"M247 Ltd"},"geo":{"city":"Reykjavik","region":"1","region_name":"Capital Region","postal_code":"105","latitude":64.1369,"longitude":-21.9139,"tz":"Atlantic/Reykjavik","lum_city":"reykjavik","lum_region":"1"}
}

总结

我们之前测试要为ChromeDriver设定Proxy时有遇到许多困难,需要使用Chrome Extension的管道设定Proxy才成功,以上希望能让您比较好了解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx 设置,设置已经解析的域名,在nginx中没有定义相应server时的默认访问

场景介绍&#xff1a; 因为业务需求&#xff0c;我们需要对域名进行解析&#xff0c;这里我对域名进行了如下解析但是&#xff0c;因为业务需求&#xff0c;我可能在nginx中只定义了kuman.xiaobudiu.top 和 www.xiaobudiu.top 的相应server的子配置文件&#xff0c;如图那么问题…

第一次作业--四则运算题目生成程序

功能简介&#xff1a; 1.获取用户所要生成算术的个数 2.随机生成算式和式子的答案 3.生成算式和答案的txt文件来保存算式和答案 思路&#xff1a; 生成里的运算数分为三个部分&#xff0c;整数&#xff0c;如果是分数就再分为分子和分母&#xff0c;然后为这三个部分创建数组&a…

ABP vNext微服务架构详细教程(补充篇)——单层模板(上)订正篇

简介在之前的《ABP vNext微服务架构详细教程》系列中&#xff0c;我们已经构建了完整的微服务架构实例&#xff0c;但是在开发过程中&#xff0c;我们会发现每个基础服务都包含10个类库&#xff0c;这是给予DDD四层架构下ABP的实现方案&#xff0c;但是实际使用中我们会发现&am…

MyBatis Plus轻松实现数据读写分离

在现代应用程序中,数据库是至关重要的组成部分。为了提高性能和可用性,常见的数据库优化策略之一是将数据库读和写操作分离,以降低数据库服务器的负载。MyBatis Plus是一个流行的Java持久化框架,它提供了读写分离的支持,结合Spring Boot 集成多数据源的特性可以帮助你轻松…

javascript基础修炼(4)——UMD规范的代码推演

javascript基础修炼(4)——UMD规范的代码推演 1. UMD规范 地址&#xff1a;https://github.com/umdjs/umd UMD规范&#xff0c;就是所有规范里长得最丑的那个&#xff0c;没有之一&#xff01;&#xff01;&#xff01;它是为了让模块同时兼容AMD和CommonJs规范而出现的&#x…

Missing artifact log4j:log4j:bundle:1.2.17

为什么80%的码农都做不了架构师&#xff1f;>>> maven引入log4jjar包出现Missing artifact log4j:log4j:bundle:1.2.17&#xff0c;解决方法是去掉bundle&#xff0c;其他的解决方案可以参考maven log4j.jar问题 Maven使用log4j可能会有协议上的问题 如果log4j的版…

PHPStorm 配置远程服务器文件夹在本地windows镜像,实现代码自动同步(类似于Samba架构文件同步功能)

场景介绍&#xff1a; 这是一种类似samba架构&#xff0c;也和 filezillaxshell 模式相类似的代码文件同步的模式&#xff0c;但是却更加优雅&#xff0c;也更加方便简洁。环境介绍&#xff1a; 本地windows端&#xff1a;编辑器phpstorm 远程Linux端&#xff1a;centos&#x…

bzoj1143/2718 祭祀river(最大独立集)

[CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2175 Solved: 1098[Submit][Status][Discuss]Description 在遥远的东方&#xff0c;有一个神秘的民族&#xff0c;自称Y族。他们世代居住在水面上&#xff0c;奉龙王为神。每逢重大庆典&#xff0c; Y族…

反向ajax实现

在过去的几年中&#xff0c;web开发已经发生了很大的变化。现如今&#xff0c;我们期望的是能够通过web快速、动态地访问应用。在这一新的文章系列中&#xff0c;我们学习如何使用反 向Ajax&#xff08;Reverse Ajax&#xff09;技术来开发事件驱动的web应用&#xff0c;以此来…

linux系统启动流程及常见问题的解决

一、前言计算机开机是一个神秘的过程。我们只是按了开机键&#xff0c;就看到屏幕上的进度条或者一行行的输出&#xff0c;直到我们到达登录界面。然而&#xff0c;计算机开机又是个异常脆弱的过程&#xff0c;我们满心期望的登录界面可能并不会出现&#xff0c;而是一个命令行…

使用.NET开发一个屏幕OCR工具

本文将介绍使用.NET开发的一款桌面截图 OCR 工具&#xff0c;软件已开源&#xff0c;地址&#xff1a;https://github.com/sangyuxiaowu/Snipping_OCR背景因为不同地方人们的使用习惯不同&#xff0c;国内可能截图更多的是使用QQ&#xff0c;微信等即时聊天工具提供的截图功能。…

segnet 编译与测试

segnet 编译与测试参考&#xff1a;http://sunxg13.github.io/2015/09/10/caffe/http://m.blog.csdn.net/lemianli/article/details/76687508http://blog.h5min.cn/u010069760/article/details/75258539&#xff08;注意&#xff1a;nakefile而非makefile.config&#xff09;1、…

Linux开启fileinfo扩展

在项目初始部署环境的时候&#xff0c;可能考虑的并不全面&#xff0c;就会少装一些扩展&#xff0c;这里讲解如何添加fileinfo扩展1、找到php安装的压缩包2、将压缩包cp到 /data目录下&#xff0c;并解压 cp php-7.0.30.tar.gz /data cd /data tar -zxvf php-7.0.30.tar.gz…

TemplateBinding与Binding区别,以及WPF自定义控件开发的遭遇

在上一次的文章WPF OnApplyTemplate 不执行 或者执行滞后的疑惑谈到怎么正确的开发自定义控件&#xff0c;我们控件的样式中&#xff0c;属性的绑定一般都是用TemplateBinding来完成,如下一个基本的按钮样式&#xff1a; <Style x:Key"SimpleButton" TargetType&q…

Layui版本的WPF开源控件库-Layui-WPF

大家好&#xff0c;我是沙漠尽头的狼。今天介绍一款Layui风格的WPF开源控件库&#xff0c;仓库信息如下&#xff1a;仓库地址&#xff1a;https://github.com/Layui-WPF-Team/Layui-WPF仓库截图&#xff1a;Layui-WPF关于Layui请点击此链接[1]了解&#xff0c;本文不做介绍&…

Mycat 之 通过Keepalived 实现高可用

一、系统拓扑图 一、操作方法 参考本博客的Nginx Keepalived 实现高可用转载于:https://blog.51cto.com/12965094/2164485

Nginx使用upstream实现动静分离

一、为什么要进行动静分离 分离资源&#xff0c;减少不必要到的请求消耗&#xff0c;减少请求延时。 注&#xff1a;我这里&#xff0c;是nginx处理静态资源&#xff0c;apache处理动态资源。 场景分析&#xff1a; 1、未分离之前的场景步骤 &#xff08;1&#xff09;客户…

HMAC

HMAC 的用途 HMAC 算法主要应用于身份验证&#xff0c;用法如下&#xff1a; 1.客户端发出登录请求2.服务器返回一个随机值&#xff0c;在会话记录中保存这个随机值3.客户端将该随机值作为密钥&#xff0c;用户密码进行 hmac 运算&#xff0c;递交给服务器4.服务器读取数据库中…

JS的原型链和继承

原型和原型链 原型prototype&#xff0c;在创建新函数的时候&#xff0c;会自动生成&#xff0c;而prototype中也会有一个constructor&#xff0c;回指创建该prototype的函数对象。 __proto__是对象或者实例中内置的[[prototype]]&#xff0c;其指向的是产生该对象的对象的prot…

Android 的滑动分析以及各种实现

一、滑动效果的产生滑动一个View&#xff0c;本质区别就是移动一个View。改变当前View所在的坐标&#xff0c;原理和动画相似不断改变坐标位置实现。实现View的滑动就必须监听滑动的事件&#xff0c;并且根据事件传入的坐标&#xff0c;动态且不断改变View的坐标&#xff0c;从…