-
-
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 |
@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?
Hi Did you manage to get the code for Socks5 proxy with chrome . Can you share pls