侧边栏壁纸
博主头像
胖胖博主等级

愿以吾辈之青春,护卫这盛世之中华。

  • 累计撰写 10 篇文章
  • 累计创建 16 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

selenium添加代理

胖胖
2023-03-17 / 0 评论 / 0 点赞 / 10 阅读 / 505 字 / 正在检测是否收录...

selenium添加代理

给selenium添加代理,代理分为有认证的代理和没有认证的代理,没有认证的代理比较简单

无认证代理

# --*-- coding:utf-8 --*--
"""
@Project      : Study
@File         : auth_proxy.py
@Time         : 2023/3/17 16:08
@Author       : 胖胖
@Email        : sxs1316@outlook.com
@description  : selenium认证代理
"""
# 导入模块
from selenium import webdriver

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument('--proxy-server=http://ip:port')  
driver = webdriver.Chrome(chrome_options=chromeOptions)

有认证代理

# --*-- coding:utf-8 --*--
"""
@Project      : Study
@File         : auth_proxy.py
@Time         : 2023/3/17 16:08
@Author       : 胖胖
@Email        : sxs1316@outlook.com
@description  : selenium认证代理
"""
# 导入模块
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


def create_proxyauth_extension(proxy_host: str, proxy_port: int,
                               proxy_username: str, proxy_password: str,
                               scheme: str = 'http', plugin_path=None):
    """Proxy Auth Extension

    args:
        proxy_host (str): domain or ip address, ie proxy.domain.com
        proxy_port (int): port
        proxy_username (str): auth username
        proxy_password (str): auth password
    kwargs:
        scheme (str): proxy scheme, default http
        plugin_path (str): absolute path of the extension

    return str -> plugin_path
    """
    import string
    import zipfile

    if plugin_path is None:
        plugin_path = 'vimm_chrome_proxyauth_plugin.zip'

    manifest_json = """
    {
        "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"
    }
    """

    background_js = string.Template(
        """
        var config = {
                mode: "fixed_servers",
                rules: {
                  singleProxy: {
                    scheme: "${scheme}",
                    host: "${host}",
                    port: parseInt(${port})
                  },
                  bypassList: ["foobar.com"]
                }
              };
    
        chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
    
        function callbackFn(details) {
            return {
                authCredentials: {
                    username: "${username}",
                    password: "${password}"
                }
            };
        }
    
        chrome.webRequest.onAuthRequired.addListener(
                    callbackFn,
                    {urls: ["<all_urls>"]},
                    ['blocking']
        );
        """
    ).substitute(
        host=proxy_host,
        port=proxy_port,
        username=proxy_username,
        password=proxy_password,
        scheme=scheme,
    )
    with zipfile.ZipFile(plugin_path, 'w') as zp:
        zp.writestr("manifest.json", manifest_json)
        zp.writestr("background.js", background_js)

    return plugin_path


proxyauth_plugin_path = create_proxyauth_extension(
    proxy_host="127.0.0.1",
    proxy_port=1000,
    proxy_username="",
    proxy_password=""
)

op = Options()
op.add_argument("--start-maximized")
op.add_extension(proxyauth_plugin_path)

driver = webdriver.Chrome(chrome_options=op)
driver.get("https://whatismyipaddress.com/")
0

评论区