資源簡介
默認情況下,Chrome的–proxy-server="http://ip:port"參數不支持設置用戶名和密碼認證。但在啟動代理IP時大多數會遇到需要通過用戶名和密碼驗證來添加代理,本博客就遇到了這樣的問題,查閱資料后,對整個思路做了一個封裝,與大家共勉

代碼片段和文件信息
import?os
import?re
import?time
import?shutil
import?zipfile
from?selenium?import?webdriver
class?Extensionhelper(object):
????‘‘‘Selenium?+?Chrome?使用用戶名密碼認證的代理封裝‘‘‘
????CHROME_PROXY_HELPER_DIR?=?‘Chrome-proxy-helper‘??#?Chrome代理模板插件目錄
????CUSTOM_CHROME_PROXY_EXTENSIONS_DIR?=?‘chrome-proxy-extensions‘??#?存儲自定義Chrome代理擴展文件的目錄
????@classmethod
????def?create_extension(cls?proxy):
????????‘‘‘
????????創建插件
????????:param?proxy:?username:password@ip:port
????????:return:
????????‘‘‘
????????m?=?re.compile(‘([^:]+):([^\@]+)\@([\d\.]+):(\d+)‘).search(proxy)??#?匹配代理格式是否正確
????????if?m:
????????????#?提取代理的各項參數
????????????username?=?m.groups()[0]
????????????password?=?m.groups()[1]
????????????ip?=?m.groups()[2]
????????????port?=?m.groups()[3]
????????????#?創建一個定制Chrome代理擴展(zip文件)
????????????if?os.path.exists(cls.CUSTOM_CHROME_PROXY_EXTENSIONS_DIR):
????????????????shutil.rmtree(cls.CUSTOM_CHROME_PROXY_EXTENSIONS_DIR)
????????????os.mkdir(cls.CUSTOM_CHROME_PROXY_EXTENSIONS_DIR)
????????????extension_file_path?=?os.path.join(cls.CUSTOM_CHROME_PROXY_EXTENSIONS_DIR
???????????????????????????????????????????????‘{}.zip‘.format(proxy.replace(‘:‘?‘_‘)))
????????????if?not?os.path.exists(extension_file_path):
????????????????#?擴展文件不存在,創建
????????????????zf?=?zipfile.ZipFile(extension_file_path?mode=‘w‘)
????????????????zf.write(os.path.join(cls.CHROME_PROXY_HELPER_DIR?‘manifest.json‘)?‘manifest.json‘)
????????????????#?替換模板中的代理參數
????????????????background_content?=?open(os.path.join(cls.CHROME_PROXY_HELPER_DIR?‘background.js‘)).read()
????????????????background_content?=?background_content.replace(‘%proxy_host‘?ip)
????????????????background_content?=?background_content.replace(‘%proxy_port‘?port)
????????????????background_content?=?background_content.replace(‘%username‘?username)
????????????????background_content?=?background_content.replace(‘%password‘?password)
????????????????zf.writestr(‘background.js‘?background_content)
????????????????zf.close()
????????????return?extension_file_path
????????else:
????????????raise?Exception(‘代理格式錯誤:?username:password@ip:port‘)
if?__name__?==?‘__main__‘:
????#?自定義修改
????user_pass?=?‘201812251154134385:10115029‘
????host?port?=?‘115.221.126.154‘?‘22214‘
????proxy?=?‘{0}@{1}:{2}‘.format(user_pass?host?port)??#?格式:username:password@ip:port
????options?=?webdriver.ChromeOptions()
????options.add_extension(Extensionhelper.create_extension(proxy))??#?需要驗證(調用封裝方法、添加插件)
????#?options.add_argument(“--proxy-server=http://{}:{}“.format(host?port))????#?不需驗證
????driver?=?webdriver.Chrome(chrome_options=options)
????driver.get(‘http://httpbin.org/ip‘)??#?訪問一個IP回顯網站,查看代理配置是否生效了
????time.sleep(10)
????driver.quit()
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-07-15?21:40??用戶名密碼驗證代理IP\
?????目錄???????????0??2019-07-15?21:40??用戶名密碼驗證代理IP\Chrome-proxy-helper\
?????文件?????????600??2019-07-15?11:21??用戶名密碼驗證代理IP\Chrome-proxy-helper\background.js
?????文件?????????365??2019-07-15?11:21??用戶名密碼驗證代理IP\Chrome-proxy-helper\manifest.json
?????文件????????3057??2019-07-15?21:41??用戶名密碼驗證代理IP\CreateProxyExtension
- 上一篇:中國鐵路機車遠程監測與故障診斷系統設計
- 下一篇:迅雷地址滲透教程
評論
共有 條評論