• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: 其他
  • 标签: 代理IP  

资源简介

默认情况下,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\CreateProxyExtensionhelper.py

评论

共有 条评论