-
-
Save rajat-np/5d901702a33e7b4b5132b1acee5d778e to your computer and use it in GitHub Desktop.
from selenium import webdriver | |
from selenium.webdriver.common.proxy import Proxy | |
from selenium.webdriver.common.keys import Keys | |
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities | |
from selenium.webdriver.chrome.options import Options | |
import zipfile,os | |
def proxy_chrome(PROXY_HOST,PROXY_PORT,PROXY_USER,PROXY_PASS): | |
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 = """ | |
var config = { | |
mode: "fixed_servers", | |
rules: { | |
singleProxy: { | |
scheme: "http", | |
host: "%(host)s", | |
port: parseInt(%(port)d) | |
}, | |
bypassList: ["foobar.com"] | |
} | |
}; | |
chrome.proxy.settings.set({value: config, scope: "regular"}, function() {}); | |
function callbackFn(details) { | |
return { | |
authCredentials: { | |
username: "%(user)s", | |
password: "%(pass)s" | |
} | |
}; | |
} | |
chrome.webRequest.onAuthRequired.addListener( | |
callbackFn, | |
{urls: ["<all_urls>"]}, | |
['blocking'] | |
); | |
""" % { | |
"host": PROXY_HOST, | |
"port": PROXY_PORT, | |
"user": PROXY_USER, | |
"pass": PROXY_PASS, | |
} | |
pluginfile = 'extension/proxy_auth_plugin.zip' | |
with zipfile.ZipFile(pluginfile, 'w') as zp: | |
zp.writestr("manifest.json", manifest_json) | |
zp.writestr("background.js", background_js) | |
co = Options() | |
#extension support is not possible in incognito mode for now | |
#co.add_argument('--incognito') | |
co.add_argument('--disable-gpu') | |
#disable infobars | |
co.add_argument('--disable-infobars') | |
co.add_experimental_option("excludeSwitches",["ignore-certificate-errors"]) | |
#location of chromedriver, please change it according to your project. | |
chromedriver = os.getcwd()+'/Chromedriver/chromedriver' | |
co.add_extension(pluginfile) | |
driver = webdriver.Chrome(chromedriver,chrome_options=co) | |
#return the driver with added proxy configuration. | |
return driver |
Is it possible to use it with socks5 proxy?
Is it possible to use it with socks5 proxy?
Hi Did you manage to get the code for Socks5 proxy with chrome . Can you share pls
@saileshkush95 you need to create the extension
directory
@rajat-np. Thanks. This works!
Maybe a usefull tip for others.
I was struggling with Chrome versions getting automatically updating causing errors of non-matching chromedriver.
I found the package webdriver_manager
which can handle this automatically
I replaced line
chromedriver = os.getcwd()+'/Chromedriver/chromedriver'
by
from webdriver_manager.chrome import ChromeDriverManager
chromedriver = ChromeDriverManager().install()
Hey @rajat-np, I copied every line of code exactly and for some reason, I'm still having a problem, I get no error message, but when I check the ip that the chrome is using, it's my IP instead of proxy IP, could anyone pls help me, at this point, I have no idea what to do next. Here is my code, if anyone can spot a mistake
from turtle import back
from weakref import proxy
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.proxy import Proxy
#from seleniumwire import webdriver
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.chrome.options import Options
import zipfile,os
import time
import json
import zipfile
import os
import random
from threading import Thread, Lock
FILE_LOCK = Lock()
chrome_options = Options()
#chrome_options.add_argument("--headless")
logins_file = open('./logins.json')
login_content = logins_file.read()
login_content = json.loads(login_content)
proxy_file = open('./proxies.txt')
proxy_contents = proxy_file.readlines()
def proxy_chrome(PROXY_HOST,PROXY_PORT,PROXY_USER,PROXY_PASS):
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 = """
var config = {
mode: "fixed_servers",
rules: {
singleProxy: {
scheme: "http",
host: "%(host)s",
port: parseInt(%(port)d)
},
bypassList: ["foobar.com"]
}
};
chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
function callbackFn(details) {
return {
authCredentials: {
username: "%(user)s",
password: "%(pass)s"
}
};
}
chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{urls: ["<all_urls>"]},
['blocking']
);
""" % {
"host": PROXY_HOST,
"port": PROXY_PORT,
"user": PROXY_USER,
"pass": PROXY_PASS,
}
pluginfile = 'extension/proxy_auth_plugin.zip'
with zipfile.ZipFile(pluginfile, 'w') as zp:
zp.writestr("manifest.json", manifest_json)
zp.writestr("background.js", background_js)
co = Options()
#extension support is not possible in incognito mode for now
#co.add_argument('--incognito')
co.add_argument('--disable-gpu')
#disable infobars
co.add_argument('--disable-infobars')
co.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
#location of chromedriver, please change it according to your project.
chromedriver = './chromedriver'
co.add_extension(pluginfile)
driver = webdriver.Chrome(chromedriver,chrome_options=co)
#return the driver with added proxy configuration.
return driver
def run():
[PROXY_HOST, PROXY_PORT, PROXY_USER, PROXY_PASS] = random.choice(proxy_contents).split(":")
#print(hostname, port, username, proxy_password)
#driver = get_chromedriver(use_proxy=True) #, PROXY_HOST=hostname, PROXY_PASS=proxy_password, PROXY_PORT=port, PROXY_USER=username)
#driver = webdriver.Chrome("./chromedriver", seleniumwire_options=options)
driver = proxy_chrome(PROXY_HOST,int(PROXY_PORT),PROXY_USER,PROXY_PASS)
try:
while True:
# do something with the driver
finally:
driver.close()
i = 0
threads = []
while True:
try:
t = Thread(target=run)
t.start()
time.sleep(5)
threads.append(t)
i+= 1
print(i)
for z in threads:
if z._is_stopped:
continue
if i >= 2:
break
except:
#logins_file.write(json.dumps(login_content))
logins_file.close()
for t in threads:
t.join()
Hi UrsaarDev, maybe too late, but the zip file is created when you run the file
This has worked great for me! Until 2025...
Any chance of "manifest_version": 3 version due to chrome disabling v2?
Hey there, I am newbie and I want to ask one question. is this the correct format of manifest_json = """ code """ and background_js = """code""",
I mean these consecutive double quotes are necessary? and is there any need to change other than path to chrome driver. Thanks