luminati python+selenium使用方式(白名单和账号密码验证方式)

一,在Windows下使用

1.官网登录后下载对应的exe代理软件

2.下载完成后打开,打开完成后登录127.0.0.1:22999,然后输入用户名和密码进行登录.登录成功后进入到如下界面

 

 3.将本机ip加入到对应的zone白名单

 点击对应zone的名称,进入到配置页面

 

 进入到设置页面后可添加白名单ip,包括账号密码验证的账号和密码也是在这里找,而不是登录的账号和密码

 

 4.添加完成后,selenium代码如下:

import time
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
host = '127.0.0.1'
port = '24000'
chrome_options = Options()
chrome_options.add_argument("--proxy-server=http://{}:{}".format(host, port))
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('http://lumtest.com/myip.json')
time.sleep(5)



此时打开的浏览器就是带着代理ip的浏览器了,如果想用指定的ip,只需要将port设置成对应的端口即可.


总结:windows下使用所需条件
①下载代理软件并打开
②代理软件打开后访问127.0.0.1:22999进行认证和ip分配
③将本机ip添加到对应的zone白名单中
④selenium通过指定的端口使用对应的代理ip.



二.Linux下使用
1.安装python,执行apt-get install python(如果已经安装了python2.X版本,可跳过)
2.登录luminati官网,找到对应的Bash安装脚本

 

 curl -L https://luminati-china.biz/static/lpm/luminati-proxy-latest-setup.sh | bash

 

3.等待安装完成,默认启动目录在/usr/local/bin下边,以守护进程方式启动:

进入到/usr/local/bin目录后执行 nohup ./luminati start > logfile.file 2>&1 &

随后使用  ps -ef | grep luminati 查看是否启动成功,另一种验证方式是执行curl 127.0.0.1:22999,如果能访问,说明启动成功

4.关键性的一步,如果你的linux ip为外网ip,那么,打开22999端口访问或者直接关闭防火墙,然后在你windows本机打开浏览器访问:linux的固定ip:22999进入到验证界面,然后输入账号密码进行登录,并分配ip,和windows版本下的第二步一样.

5.验证完成后将linux的固定ip添加到对应zone的白名单中,然后可通过:curl --proxy 127.0.0.1:24000 "http://lumtest.com/myip.json"进行验证ip是否是你的代理ip,一样的是通过修改端口进行代理ip的指定.

总结: ①需要安装python2.X版本才能安装成功代理软件   ②代理软件需要以后台守护进程的方式启动   ③添加了白名单后要进行登录验证,即访问linux固定ip:22999进行登录和ip的分配

 

三.windows下进行账号密码验证(非白名单方式)

一样的需要先打开代理软件,然后进行登录验证一波

然后主要是上python代码:

分为三个部分,第一个是需要添加两个配置一样的东西,基本上来说是固定格式的,可以直接拷贝过去用.

先上一波结构:

 

 这是需要用到的东西,它们都在同一个目录下,然后接下来上那三个东东的代码,一个是background.js,一个是manifest.json,还有一个就是我们的py代码,直接自己新建文件,然后以我给出的名字命名即可(py文件的名字随便取)

新建一个文件夹用来放这两个文件,文件夹命名为:Chrome-proxy-helper

background.js

var config = {
mode: "fixed_servers",
rules: {
singleProxy: {
scheme: "http",
host: 'proxy_host',
port: parseInt('proxy_port')
},
bypassList: ["foobar.com"]
}
};

chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

function callbackFn(details) {
return {
authCredentials: {
username: 'proxy_username',
password: 'proxy_password'
}
};
}

chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{urls: ["<all_urls>"]},
['blocking']
);




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"
}


最后是py代码
import os
import re
import time
import shutil
import zipfile
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


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('proxy_username', username)
background_content = background_content.replace('proxy_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 = 'zone设置里的用户名:zone设置里的密码'
host = '127.0.0.1'
port = "24000"
proxy = '{0}@{1}:{2}'.format(user_pass, host, port)
chrome_options = Options()
chrome_options.add_extension(ExtensionHelper.create_extension(proxy))
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('http://lumtest.com/myip.json')
time.sleep(5)
#driver.quit()



另外同一目录下新建chrome-proxy-extensions文件夹,然后尝试运行一波吧

总结:①代理软件要开着 ②填的是zone的用户名和密码,不是登录的用户名和密码 ③别漏了那两个文件,文件夹和文件的名字不要错了

 




posted on 2019-09-27 16:48  必经之路  阅读(2807)  评论(0编辑  收藏  举报

导航