文档章节

python+selenium+chrome使用socks5代理

sevensmith
 sevensmith
发布于 2018/09/21 21:40
字数 673
阅读 719
收藏 0

很多人听到要走代理,就打开google开始搜索selenium上webdriver如何添加参数使用代理,搜到的结果有以下2种:

  1. 无用户密码代理
from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
# 添加代理服务器信息
chrome_options.add_argument('--proxy-server=http://{ip}:{port}')
browser = webdriver.Chrome(chrome_options=chrome_options, executable_path='/xxx/chromedriver')
browser.get('http://www.baidu.com')
# 退出浏览器
browser.quit()
  1. http/https有用户密码代理
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 生成zip文件作为chrome代理插件
def create_proxyauth_extension(proxy_host, proxy_port,
                               proxy_username, proxy_password,
                               scheme='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 = '/xxx/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

# 运行一次生成zip文件后,即可注释掉
proxyauth_plugin_path = create_proxyauth_extension(
    proxy_host="your proxy ip",
    proxy_port="the number of your proxy port",
    proxy_username="your username",
    proxy_password="your password"
)

co = Options()
co.add_argument("--start-maximized")
# 传入zip路径
co.add_extension(proxyauth_plugin_path)


driver = webdriver.Chrome(chrome_options=co)
driver.get("http://www.baidu.com")

那么问题来了,对于目前应用最为普遍的socks5代理,如shadowsocks,google却没有给出方案。使用过shadowsocks的小伙伴都知道,成功连通外面的世界有三要素:ip,port和password。那么要为webdriver设置socks5代理,不知道有没有人和我一样,第一反应就是搜索如何设置webdriver使其能使用socks5且能设置密码访问website。

我并没有找到有效的直接设置shadowsocks服务端的信息就能成功的方法,就走了一个投机取巧的路吧,和大家分享一下。

默认设置下,shadowsocks在本机开启时,监听的是localhost:1080 端口,本机复杂的插件或者脚本可以设置服务端的信息,包括ip,port,密码等。那么只需要将webdriver模拟的浏览器访问请求发送给1080端口,shadowsocks监听到后自然会与服务端通信,如此一来,webdriver就能推开窗户看世界了。

注意:本机一定要配置好shadowsocks

话不多说,直接上代码

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
# 设置代理
chrome_options.add_argument('--proxy-server=socks5://localhost:1080')
browser = webdriver.Chrome(chrome_options=chrome_options, executable_path='/Users/seven/PycharmProjects/wfp/chromedriver')
proxy.new_har('youtube')
browser.get('http://www.google.com')

© 著作权归作者所有

共有 人打赏支持
sevensmith
粉丝 0
博文 6
码字总数 2247
作品 0
西安
私信 提问
Proxy-Go v6.3 发布 :DNS缓存优化,解析速度大幅提升.

Proxy-Go v6.3发布啦。Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务器,支持正向代理、反向代理、透明代理、内网穿透、TCP/UDP端口映射、SSH中转、TLS加密传输、协...

狂奔的蜗牛.
2018/10/15
831
3
Proxy-Go v6.5 发布,修复多项遗留问题,更稳定!

Proxy-Go v6.5发布啦。Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务器,支持正向代理、反向代理、透明代理、内网穿透、TCP/UDP端口映射、SSH中转、TLS加密传输、协...

狂奔的蜗牛.
2018/11/12
812
6
Proxy-Go v6.8 发布,内网穿透 , 加速器 , 贺岁版!

Proxy-Go v6.8 发布啦。这次直接跳过6.7, 发布吉利v6.8版本 , Proxy-Go 预祝大家来年顺顺发发! Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务器,支持正向代理、反向...

狂奔的蜗牛.
2018/12/29
0
0
Proxy-Go v6.4 发布,优化 socks5 代理,内存占用更低!

Proxy-Go v6.4发布啦。Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务器,支持正向代理、反向代理、透明代理、内网穿透、TCP/UDP端口映射、SSH中转、TLS加密传输、协...

狂奔的蜗牛.
2018/10/31
944
2
Proxy-Go v6.1 发布 : 内网穿透新增 TCPS 和 TOU 协议

Proxy-Go v6.1发布啦。Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务器,支持正向代理、反向代理、透明代理、内网穿透、TCP/UDP端口映射、SSH中转、TLS加密传输、协...

狂奔的蜗牛.
2018/09/19
858
0

没有更多内容

加载失败,请刷新页面

加载更多

Android Messenger进程间客户端向服务端传递数据

Messenger:客户端向服务端传递数据 1.Service: public class MessengerService extends Service { private Messenger messenger = new Messenger(new Handler() { public void handleMess......

Coding缘
8分钟前
0
0
Pod在多可用区worker节点上的高可用部署

一、 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可用...

zhaowei121
26分钟前
1
0
oracle XTTS介绍

一、什么是XTTS 首先什么是XTTS。XTTS其实是从TTS来的,TTS其实也是传输数据的一种手段,传输数据的时候可能用过EXP的方式,再往后可能用数据泵导入导出一些数据,或者去做备份然后再恢复。其...

突突突酱
27分钟前
0
0
[缺陷分析]半同步下多从库复制异常

引 言 本文是由爱可生研发团队出品的「图解MySQL」系列文章,不定期更新,但篇篇精品。 爱可生开源社区持续运营维护的小目标: 每周至少推送一篇高质量技术文章 每月研发团队发布开源组件新版...

爱可生
27分钟前
0
0
二维数组序号重置

public static function unique_arr($array2D,$stkeep=false,$ndformat=true){ // 判断是否保留一级数组键 (一级数组键可以为非数字) if($stkeep) $stArr = array_keys($array2D); // 判断是......

dragon_tech
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部