Trong các dự web scraping, web automation, sử dụng proxy để thay đổi địa chỉ IP là việc rất thường xuyên sử dụng. Bài viết này sẽ hướng dẫn, chia sẻ mã nguồn cấu hình proxy cho trình duyệt. Mã nguồn được viết bằng Python.
Thường thì chúng ta có 2 loại proxy chính đó là: Loại proxy không cần xác thực, và loại proxy có tài khoản mật khẩu để xác thực. Với lại proxy không cần xác thực thì khi khởi tạo trình duyệt, gán IP, port là xong, rất đơn giản. Tuy nhiên với loại proxy cần xác thực tài khoản và mật khẩu thì phức tạp hơn, chúng ta cần có plugin để cấu hình thông tin tài khoản, mật khẩu.
Dưới đây xin chia sẻ mã nguồn Python + Selenium thiết lập proxy cho cả 2 loại:
1. Cấu hình proxy không cần xác thực
Với các proxy không cần xác thực, sử dụng mã nguồn dưới đây:
1 2 3 4 5 6 7 8 |
proxyList = [ '192.168.1.1:8080', '192.168.1.4:8080', '192.168.1.9:8080' ] chromeOptions = webdriver.ChromeOptions() chromeOptions.add_argument('--proxy-server={}'.format(random.choice(proxyList))) driver = webdriver.Chrome(executable_path="chromedriver.exe", chrome_options=chromeOptions) |
Hãy thay đổi proxy trong list proxyList nhé !
2. Cấu hình proxy cần phải xác thực
Với các proxy cần xác thực, sử dụng mã nguồn dưới đây:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
def getPlugin(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: "%s", port: parseInt(%s) }, bypassList: ["localhost"] } }; chrome.proxy.settings.set({value: config, scope: "regular"}, function() {}); function callbackFn(details) { return { authCredentials: { username: "%s", password: "%s" } }; } chrome.webRequest.onAuthRequired.addListener( callbackFn, {urls: ["<all_urls>"]}, ['blocking'] ); """ % (proxy_host, proxy_port, proxy_user, proxy_pass) pluginfile = 'proxy_auth_plugin.zip' with zipfile.ZipFile(pluginfile, 'w') as zp: zp.writestr("manifest.json", manifest_json) zp.writestr("background.js", background_js) return pluginfile proxyArgsList = [ { 'proxy_host': '192.168.1.1', 'proxy_port': '80', 'proxy_user': 'abc', 'proxy_pass': 'abcpassword', }, { 'proxy_host': '192.168.1.2', 'proxy_port': '80', 'proxy_user': 'abc', 'proxy_pass': 'abcpassword', }, 'proxy_host': '192.168.1.3', 'proxy_port': '80', 'proxy_user': 'abc', 'proxy_pass': 'abcpassword', ] chromeOptions = webdriver.ChromeOptions() chromeOptions.add_extension(getPlugin(**random.choice(proxyArgsList))) driver = webdriver.Chrome(executable_path="chromedriver.exe", chrome_options=chromeOptions) |
Hãy thay đổi proxy trong proxyArgsList nhé !
Hy vọng bài viết hữu ích cho các bạn. Nếu có câu hỏi, hãy comment bên dưới, mình sẽ sớm trả lời các bạn.
Mình là một lập trình viên tự do với hơn 10 năm kinh nghiệm. Mình chuyên về Web scraping, Web automation, Python, Django
Cám ơn vì bài viết của anh.
Nhưng em bị lỗi này. Anh có thể kiểm tra không ạ.
—————-
chromeOptions.add_extension(getPlugin(**random.choice(proxyArgsList)))
TypeError: getPlugin() missing 1 required positional argument: ‘self’
Hi e,
Cái này e hãy bỏ biến đầu vào self trong hàm getPlugin nhé. A đã cập nhật bài viết rồi. E hãy comment nếu vẫn gặp lỗi nhé.
best erectile dysfunction
erection pills viagra online
erectile aid device
erectile remedies for men
why erectile dysfunction
erectile dysfunction pills
erectile neuroplasticity
service connected erectile dysfunction