Luk*_*ton 5 python proxy selenium selenium-webdriver docker
我正在使用代理网络,并希望在 Python 上使用 Selenium 对其进行配置。我见过很多帖子使用该HOST:PORT方法,但代理网络使用的“URL方法” http://USER:PASSWORD@PROXY:PORT
我发现SeleniumWire 是一种将代理网络的“URL 方法”连接到 Selenium Scraper 的方法。请参阅基本 SeleniumWire 配置:
from seleniumwire import webdriver
options = {
'proxy':
{
'http': 'http://USER:PASSWORD@PROXY:PORT',
'https': 'http://USER:PASSWORD@PROXY:PORT'
},
}
driver = webdriver.Chrome(seleniumwire_options=options)
driver.get("https://some_url.com")
Run Code Online (Sandbox Code Playgroud)
这正确地添加并循环了驱动程序的代理,但是在许多网站上,爬虫很快就被 CloudFlare阻止。在本地 IP 上运行时不会发生这种阻塞。在搜索 SeleniumWire 的 GitHub Repository Issues后,我发现这是由 TLS 指纹识别引起的,并且当前没有解决此问题的方法。
我尝试以传统的硒方式配置代理:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=http://USER:PASSWORD@PROXY:PORT")
driver = webdriver.Chrome(options=options)
driver.get("https://some_url.com")
Run Code Online (Sandbox Code Playgroud)
浏览器实例确实打开,但由于网络错误而失败。浏览器实例不会加载到已建立的 URL 中。

Docker 配置此配置的最终结果将是在Lambda 函数内的docker容器中运行 python 代码。不知道这是否会引入新的抽象级别。
我还可以使用哪些其他资源来正确配置我的 Selenium scraper 以使用 IP 循环的“URL 方法”?
Github: https: //github.com/SeleniumHQ/selenium/issues/10605
ChromeDriver:https://bugs.chromium.org/p/chromedriver/issues/detail? id=4118
可以使用 Selenium 作为扩展来配置代理网络或“URL”代理。创建以下 JS 脚本和 JSON 文件:
var config = {
mode: "fixed_servers",
rules: {
singleProxy: {
scheme: "http",
host: "<PROXY>",
port: parseInt(<PORT>)
},
bypassList: ["foobar.com"]
}
};
chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
function callbackFn(details) {
return {
authCredentials: {
username: "<USER>",
password: "<PASSWORD>"
}
};
}
chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{urls: ["<all_urls>"]},
['blocking']
);
Run Code Online (Sandbox Code Playgroud)
{
"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"
}
Run Code Online (Sandbox Code Playgroud)
将background.js和manifest.json压缩为proxy.zip并编写以下内容:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_extension("proxy.zip")
driver = webdriver.Chrome(options=options)
driver.get("https://whatismyipaddress.com/")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1543 次 |
| 最近记录: |