最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用Python編寫腳本使IE實(shí)現(xiàn)代理上網(wǎng)的教程

 更新時(shí)間:2015年04月23日 16:02:52   作者:Chairo  
這篇文章主要介紹了用Python編寫腳本使IE實(shí)現(xiàn)代理上網(wǎng)的教程,“著名的”goagent代理也是基于同樣原理實(shí)現(xiàn),需要的朋友可以參考下

廠里上個(gè)網(wǎng)需要設(shè)置代理服務(wù)器,切換各種環(huán)境『包括但不僅限于開發(fā)環(huán)境、QA、預(yù)上線、驗(yàn)收、生產(chǎn)環(huán)境、壓力測試、Demo……』都需要給瀏覽器設(shè)置不同的代理服務(wù)器。

雖然俺有神器Firefox+Change Host+HostAdmin+Proxy Selector的組合來輕松切換Host,切換瀏覽器代理,但是…凡是就怕『但是』。

但是碰到一些IE才有的bug時(shí)候不得不換瀏覽器?。?!還要開虛擬機(jī)進(jìn)去搞IE6、IE8、360、搜狗這些奇葩瀏覽器?。。。?/p>

有同事建議搞個(gè)bat腳本來做這些,但沒人肯動手……而且bat能不能實(shí)現(xiàn)先不說,重點(diǎn)是咱不熟啊。

搞個(gè)C#寫個(gè)winform或者console控制臺還需要.NET framework不是,虛擬機(jī)裝個(gè).NET framework4.0又要很多時(shí)間『而且不同的snapshot都要裝一遍…』

最最重要的,好久不寫文章了不是,咱不想在博客里寫C#相關(guān)的東西不是。所以,操刀Python寫幾行代碼和廠里兄弟們顯擺一下『人生苦短,我用Python』的好處。

具體實(shí)現(xiàn)步驟如下:

    安裝pywin32、WMI支持。具體下載地址Google一下,因?yàn)槲业氖?2位python2.7系列,下載到的文件名分別為(pywin32-218.win32-py2.7.exe、WMI-1.4.7.win32.exe)

    開搞。

首先,我們查資料知道,IE瀏覽器的代理內(nèi)容在注冊表中『HKEYCURRENTUSER\Software\Microsoft\Windows\CurrentVersion\Internet Settings』這里存著,所以我們理論上只要修改這里相關(guān)的鍵值就可以切換IE代理。

所以,第一個(gè)函數(shù)就是修改注冊表鍵值:

def changeIEProxy(keyName, keyValue):

  pathInReg = 'Software\Microsoft\Windows\CurrentVersion\Internet Settings'

  key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER,pathInReg, 0, win32con.KEY_ALL_ACCESS)

  win32api.RegSetValueEx(key, keyName, 0, win32con.REG_SZ, keyValue)

  win32api.RegCloseKey(key)

因此段代碼中用到了pywin32的的東西,所以在文件最開頭需要做import win32api, win32con,引入相關(guān)的class

修改系統(tǒng)注冊表的函數(shù)其實(shí)就這么幾行…當(dāng)然,因?yàn)槲覐S必須通過代理服務(wù)器上網(wǎng),所以修改系統(tǒng)注冊表的鍵值類型我只用到了REG_SZ這一種,實(shí)際其他情況還會有REG_DWORD啊等等類型。

然后咱需要一個(gè)配置文件,來保存各種場景『QA啊開發(fā)環(huán)境啊』的不同的配置信息,這時(shí)候我使用的配置文件為ini格式,用Python自帶的ConfigParser就可以解析此種文件格式。

沒有采用以往我最熟悉的XML或者json純粹為了裝x,xml和json總覺著是web上用的東西,ini看起來比較像一個(gè).exe比較常用的配置文件格式。

也因?yàn)橐郧皼]用過ini格式的配置文件,這次權(quán)當(dāng)又學(xué)會一種Python的玩法而已。

所以讀取ini配置文件的代碼為:

config = ConfigParser.ConfigParser()

config.read('config.ini')

if config.has_section(_section):

  _ProxyServer = config.get(_section, 'ProxyServer')

  _ProxyOverride = config.get(_section, 'ProxyOverride')

同樣,因?yàn)橛玫搅薈onfigParser,需要在文件最開頭也import ConfigParser一下。

細(xì)心的小伙伴會注意到這段代碼中有一個(gè)_section的變量實(shí)際是沒有定義的,而這個(gè)變量俺給它的含義是前邊所寫的『場景』,比如_section=='dev'表示開發(fā)環(huán)境,_section=='qa'表示QA環(huán)境,而咱們這次既然做的是一個(gè)類似exe的程序,所以_section需要在執(zhí)行exe時(shí)候當(dāng)作參數(shù)傳進(jìn)來。

這時(shí)候咱們就要用到Python的sys模塊了,同樣import sys,然后在程序中通過:

_section = sys.argv[1] if len(sys.argv) > 1 else 'dev'

這樣的方式來獲取『場景』這個(gè)參數(shù),這一段代碼就會變成:

_section = sys.argv[1] if len(sys.argv) > 1 else 'dev'

config = ConfigParser.ConfigParser()

config.read('config.ini')

if config.has_section(_section):

  _ProxyServer = config.get(_section, 'ProxyServer')

  _ProxyOverride = config.get(_section, 'ProxyOverride')

既然已經(jīng)讀取到配置文件中的ProxyServer和ProxyOverride這倆東東了,寫入到注冊表理論上就能完成咱們的修改IE代理配置的大業(yè)了:

_section = sys.argv[1] if len(sys.argv) > 1 else 'dev'

config = ConfigParser.ConfigParser()

config.read('config.ini')

if config.has_section(_section):

  _ProxyServer = config.get(_section, 'ProxyServer')

  _ProxyOverride = config.get(_section, 'ProxyOverride')

  changeIEProxy('ProxyServer', _ProxyServer)

  changeIEProxy('ProxyOverride', _ProxyOverride)

前一句為啥是『理論上』呢,因?yàn)樽员韮?nèi)容雖然已經(jīng)修改了,但實(shí)際上IE瀏覽器并沒有生效,讓IE瀏覽器生效需要關(guān)閉重新打開。

這時(shí)候就用到前邊安裝的一個(gè)叫做WMI的東東,import wmi ctypes,然后:

def kill_ie():

  c = wmi.WMI()

  kernel32 = ctypes.windll.kernel32

  for process in c.Win32_Process():

    if process.Name=='iexplore.exe':

      kernel32.TerminateProcess(kernel32.OpenProcess(1, 0, process.ProcessId), 0)

當(dāng)然,這段代碼是有一點(diǎn)點(diǎn)問題的,只關(guān)閉了IE沒有重新打開……是因?yàn)榘惩祽辛?,俺可以接受手動打開IE…

綜上所述:

完整的代碼為:

#coding=utf-8

import win32api, win32con, sys, ConfigParser, os, wmi, ctypes

def kill_ie():

  c = wmi.WMI()

  kernel32 = ctypes.windll.kernel32

  for process in c.Win32_Process():

    if process.Name=='iexplore.exe':

      kernel32.TerminateProcess(kernel32.OpenProcess(1, 0, process.ProcessId), 0)

def changeIEProxy(keyName, keyValue):

  pathInReg = 'Software\Microsoft\Windows\CurrentVersion\Internet Settings'

  key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER,pathInReg, 0, win32con.KEY_ALL_ACCESS)

  win32api.RegSetValueEx(key, keyName, 0, win32con.REG_SZ, keyValue)

  win32api.RegCloseKey(key)

def check_config():

  if not os.path.isfile('config.ini'):

    cfg = ConfigParser.ConfigParser()

    #開發(fā)環(huán)境

    cfg.add_section('dev')

    cfg.set('dev', 'ProxyServer', '192.168.0.6:3128')

    cfg.set('dev', 'ProxyOverride', 'localhost;127.0.0.1')

    #預(yù)上線

    cfg.add_section('prepare')

    cfg.set('prepare', 'ProxyServer', '192.168.0.6:3128')

    cfg.set('prepare', 'ProxyOverride', 'localhost;127.0.0.1;')

    #線上

    cfg.add_section('online')

    cfg.set('online', 'ProxyServer', '192.168.0.6:3128')

    cfg.set('online', 'ProxyOverride', 'localhost;127.0.0.1')

    #QA

    cfg.add_section('qa')

    cfg.set('qa', 'ProxyServer', '192.168.2.16:3128')

    cfg.set('qa', 'ProxyOverride', 'localhost;127.0.0.1')

    cfg.write(open('config.ini', 'a'))

    return False

  return True

if __name__ == "__main__":

  _section = sys.argv[1] if len(sys.argv) > 1 else 'dev'

  if check_config():

    kill_ie()

    config = ConfigParser.ConfigParser()

    config.read('config.ini')

    if config.has_section(_section):

      _ProxyServer = config.get(_section, 'ProxyServer')

      _ProxyOverride = config.get(_section, 'ProxyOverride')

      changeIEProxy('ProxyServer', _ProxyServer)

      changeIEProxy('ProxyOverride', _ProxyOverride)

    print 'done, open ie'

  else:

    print 'config.ini is created, modify config.ini and try again'

相關(guān)文章

  • Python如何匹配文本并在其上一行追加文本

    Python如何匹配文本并在其上一行追加文本

    這篇文章主要介紹了Python如何匹配文本并在其上一行追加文本,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python六種基本數(shù)據(jù)類型及常用函數(shù)展示

    python六種基本數(shù)據(jù)類型及常用函數(shù)展示

    這篇文章主要為大家介紹了python六種基本數(shù)據(jù)類型及常用函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • Python實(shí)現(xiàn)字符串中某個(gè)字母的替代功能

    Python實(shí)現(xiàn)字符串中某個(gè)字母的替代功能

    小編想實(shí)現(xiàn)這樣一個(gè)功能:將輸入字符串中的字母 “i” 變成字母 “p”。想著很簡單,怎么實(shí)現(xiàn)呢?下面小編給大家?guī)砹薖ython實(shí)現(xiàn)字符串中某個(gè)字母的替代功能,感興趣的朋友一起看看吧
    2019-10-10
  • Django框架下在視圖中使用模版的方法

    Django框架下在視圖中使用模版的方法

    這篇文章主要介紹了Django框架下在視圖中使用模版的方法,Django是Python豐富多彩的眾框架中最有人氣的一個(gè),需要的朋友可以參考下
    2015-07-07
  • 四種Python機(jī)器學(xué)習(xí)超參數(shù)搜索方法總結(jié)

    四種Python機(jī)器學(xué)習(xí)超參數(shù)搜索方法總結(jié)

    在建模時(shí)模型的超參數(shù)對精度有一定的影響,而設(shè)置和調(diào)整超參數(shù)的取值,往往稱為調(diào)參。本文將演示在sklearn中支持的四種基礎(chǔ)超參數(shù)搜索方法,需要的可以參考一下
    2022-11-11
  • Python使用Rich?type和TinyDB構(gòu)建聯(lián)系人通訊錄

    Python使用Rich?type和TinyDB構(gòu)建聯(lián)系人通訊錄

    這篇文章主要為大家介紹了Python使用Rich?type和TinyDB構(gòu)建聯(lián)系人通訊錄應(yīng)用程序,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 圖文詳解Python中模塊或py文件導(dǎo)入(超詳細(xì)!)

    圖文詳解Python中模塊或py文件導(dǎo)入(超詳細(xì)!)

    導(dǎo)入文件目的就是為了執(zhí)行文件,下面這篇文章主要給大家介紹了關(guān)于Python中模塊或py文件導(dǎo)入的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 利用pandas將非數(shù)值數(shù)據(jù)轉(zhuǎn)換成數(shù)值的方式

    利用pandas將非數(shù)值數(shù)據(jù)轉(zhuǎn)換成數(shù)值的方式

    今天小編就為大家分享一篇利用pandas將非數(shù)值數(shù)據(jù)轉(zhuǎn)換成數(shù)值的方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 詳解如何用Python模擬登錄淘寶

    詳解如何用Python模擬登錄淘寶

    最近想爬取淘寶的一些商品,但是發(fā)現(xiàn)如果要使用搜索等一些功能時(shí)基本都需要登錄,所以就想出一篇模擬登錄淘寶的文章!本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Python判斷和循環(huán)語句的分析與應(yīng)用

    Python判斷和循環(huán)語句的分析與應(yīng)用

    判斷語句是用來篩選條件,過濾條件的。循環(huán)語句是用來解決重復(fù)性代碼的問題,提高工作效率。今天的知識點(diǎn)不多,耐心看完吧
    2022-07-07

最新評論

临沂市| 广平县| 沅江市| 阿克陶县| 柘荣县| 扶余县| 贵定县| 梅州市| 都昌县| 博乐市| 临清市| 石棉县| 米林县| 龙江县| 罗源县| 来凤县| 景泰县| 嘉祥县| 英山县| 松滋市| 理塘县| 贵港市| 铅山县| 马鞍山市| 阳西县| 遂溪县| 炉霍县| 厦门市| 锦州市| 泾川县| 镇雄县| 那坡县| 建昌县| 吉木萨尔县| 大厂| 大足县| 湘潭市| 闵行区| 旬阳县| 衡东县| 西城区|