selenium如何为chrome使用带验证的socks5代理?
1、前言
小码哥前段时间投资了一个面馆儿,有点忙碌就没有更新文章,很多粉丝在后台开始催更了,这不,一忙完就马不停蹄的过来更新了。闲话少说,咱们继续开始selenium系列的文章。
2、问题
我们都知道在使用selenium开发爬虫的时候不可避免的会使用socks5高匿名代理。一般情况下我们使用方法如下(开发语言为python):
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("proxy-server=socks5://127.0.0.1:1080")
driver = webdriver.Chrome(
"./chromedriver", chrome_options=chrome_options)
我们的代理是:socks5://127.0.0.1:1080,当然这是本地自己搭的socks5代理,不需要账号密码就可以使用,但是如果我们搞了一台服务器在上面搭建了socks5代理服务,你如果不设置账号密码,那岂不是会变成人人都可以用的开放式socks5代理服务,你问我为什么?因为总有一些进行全网扫描的投机分子会发现你的服务器的开放代理。
但是你又要问了,chrome不支持socks5代理加认证,这不能怪我啊。
确实chrome原生不支持socks5代理认证,所以小码哥在这里介绍一种方式,抛砖引玉,有其他合适的方式可以交流。
3、方案
咱们开门见山,其实很简单,如果服务器的socks5代理需要验证的话,我们不直接使用服务器的socks5代理,我们中间加一层转发,让转发这个中间件支持socks5验证不就行了,而且我们的程序还要能够控制这个中间件。那么现在我们的流程是这样的:
思路捋清楚了,那么接下来的问题就是咱们如何实现socks5代理的转发中间件。当然我们没有必要亲自去重新实现socks5协议,市面上已经有对应的实现,我们只需要有发现的眼睛。小码哥使用python这一个库:pproxy,安装使用方式挺简单的:
大家可以直接进入github地址:https://github.com/qwj/python-proxy查看使用文档,pproxy的功能也挺多,它也可以当作独立的socks5代理服务器使用,而且是纯python实现,不需要安装很麻烦的依赖。 我就介绍ppproxy主要使用的两种方式: - 作为socks5代理服务器
直接启动:
pproxy -l socks5://host:port#username:password -vv
以上的host,port分别为主机ip和端口,host可以为空,那样表示socks5服务监听主机的所有的地址 username和password就是socks5服务器的账号和密码。
dockers方式启动:
docker run -it -p 8080:8080 mosajjal/pproxy:latest -l socks5://:8080#username:password -vv
以上默认主机和docker映射端口为8080,读者可以自己定,账号和密码也自己替换,另外也可以看到主机ip我们设置的为空 - 作为socks5转发代理服务器
pproxy -l socks5://127.0.0.1:8080 -r socks5://host:port#username:password -vv
以上命令很简单 -l代表监听listen,-r代表转发relay,那么意思很明确,我们监听本地的8080端口提供无验证的socks5服务,将收到的数据包转发给host:port所指的需要验证的socks5服务。
4、集成
我们可以用python以启动子进程的方式,在selenium启动chrome之前启动pproxy作为转发中间件,然后把启动的chrome的代理设置为本地的socks5转发中间件,当然你也可以直接在代码里集成pproxy,因为都是python系的也比较方便。然后小码哥因为项目需要是用c#集成的pproxy,更麻烦,不过是相通的。我说说c#集成的思路: - 将pproxy用pyinstaller打包成pproxy.exe
- 利用c#启动子进程的方式启动并控制pproxy.exe的生命周期
5、 结束语
ok,这期的文章咱们先到这里了,读者有任何疑问可以联系我,加入群交流,也可以在后台留言,我看到了会回复。
最后,微信搜索“码道工程”关注我的公众号,获取更多的文章。
请先登陆 或 注册