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.pswp.cn/news/282336.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282336.shtml
英文地址,請注明出處:http://en.pswp.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;從…