Selenium代理设置的基本原理
当你用Selenium控制浏览器进行自动化操作时,有时需要让浏览器通过一个代理服务器来访问网络。这就像是你出门办事,不直接去目的地,而是先绕道去一个指定的“中转站”,由这个“中转站”帮你完成后续的访问。在Selenium中,这个“中转站”就是代理IP。设置代理的核心,是在启动浏览器时,通过特定的配置选项(Options),将代理服务器的地址和端口信息传递给浏览器驱动(WebDriver)。这样,浏览器后续发起的所有网络请求,都会先经过你指定的代理服务器。理解这个“中转配置”的环节,是成功使用代理的第一步。
Chrome浏览器代理配置详解
Chrome是自动化测试中最常用的浏览器之一。为Chrome设置代理,主要依赖于ChromeOptions这个类。下面是一个清晰、分步的示例,展示了如何将天启代理提供的IP集成到你的代码中。
你需要从天启代理获取代理信息。假设你通过其API接口获得了一个格式为IP:端口的代理,例如“123.45.67.89:8080”。天启代理支持HTTP/HTTPS/SOCKS5多种协议,你需要根据自己获取的代理类型来选择。以下是针对HTTP/HTTPS代理的设置方法:
关键代码示例:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
从天启代理获取的代理信息
proxy_ip_port = "123.45.67.89:8080" 请替换为实际获取的IP和端口
创建Chrome配置选项
chrome_options = Options()
添加代理参数,这是最核心的一步
chrome_options.add_argument(f'--proxy-server=http://{proxy_ip_port}')
如果需要为HTTPS请求也使用同一代理,通常上述设置已足够
若代理服务器要求认证,需配合插件处理,下文会详述
启动带有代理设置的浏览器
driver = webdriver.Chrome(options=chrome_options)
后续的driver.get()等操作都将通过代理进行
driver.get("http://httpbin.org/ip") 此网站可用于测试当前使用的IP
print(driver.page_source)
driver.quit()
这段代码的关键在于chrome_options.add_argument(f'--proxy-server=http://{proxy_ip_port}')这一行。它直接告诉Chrome浏览器将所有HTTP流量导向你指定的代理服务器。天启代理的IP可用率高达99%以上,响应延迟极低,这能有效保证你的自动化脚本不会因代理失效而频繁中断。
Firefox与Edge浏览器的代理设置
不同浏览器的WebDriver设置代理的方式略有不同,但原理相通。
Firefox (GeckoDriver) 设置代理:
Firefox通过firefox_options或FirefoxProfile来设置代理,后者功能更丰富。
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
proxy_ip_port = "123.45.67.89:8080"
firefox_options = Options()
设置代理
firefox_options.set_preference('network.proxy.type', 1) 1代表手动配置代理
firefox_options.set_preference('network.proxy.http', proxy_ip_port.split(':')[0])
firefox_options.set_preference('network.proxy.http_port', int(proxy_ip_port.split(':')[1]))
firefox_options.set_preference('network.proxy.ssl', proxy_ip_port.split(':')[0]) HTTPS代理
firefox_options.set_preference('network.proxy.ssl_port', int(proxy_ip_port.split(':')[1]))
driver = webdriver.Firefox(options=firefox_options)
Microsoft Edge 设置代理:
Edge浏览器的设置方法与Chrome非常相似,因为它们同源。
from selenium import webdriver
from selenium.webdriver.edge.options import Options
proxy_ip_port = "123.45.67.89:8080"
edge_options = Options()
edge_options.add_argument(f'--proxy-server=http://{proxy_ip_port}')
driver = webdriver.Edge(options=edge_options)
处理需要用户名密码认证的代理
天启代理支持终端IP授权和账号密码授权两种方式。如果你使用的是账号密码授权模式,直接设置代理服务器地址是不够的,还需要在浏览器中处理认证弹窗。一个常见且稳定的解决方案是使用浏览器扩展插件来自动填充认证信息。
以下是一个为Chrome浏览器添加代理认证插件的示例:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import zipfile
天启代理的认证信息
proxy_host = "gateway.tianqiip.com" 示例代理主机
proxy_port = "端口"
proxy_user = "你的用户名"
proxy_pass = "你的密码"
创建一个用于存储插件配置的临时文件
manifest_json = """
{
"version": "1.0.0",
"manifest_version": 2,
"name": "TianQi Proxy Auth",
"permissions": [
"proxy",
"tabs",
"unlimitedStorage",
"storage",
"",
"webRequest",
"webRequestBlocking"
],
"background": {
"scripts": ["background.js"]
}
}
"""
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: [""]},
['blocking']
);
""" % (proxy_host, proxy_port, proxy_user, proxy_pass)
将插件文件打包成 .crx 格式所需的zip
pluginfile = 'proxy_auth_plugin.zip'
with zipfile.ZipFile(pluginfile, 'w') as zp:
zp.writestr("manifest.json", manifest_json)
zp.writestr("background.js", background_js)
chrome_options = Options()
chrome_options.add_extension(pluginfile) 加载插件
注意:此时不再使用--proxy-server参数,代理由插件控制
driver = webdriver.Chrome(options=chrome_options)
这种方法通过一个内置的插件,在浏览器发起请求时自动附加认证信息,完美解决了代理密码认证的问题。天启代理的企业级服务采用高性能架构,支持高并发调用,配合这种稳定的认证方式,非常适合需要大规模、长时间运行的自动化业务。
动态切换代理与最佳实践
在一些复杂的场景下,你可能需要在同一个自动化会话中切换不同的代理IP。直接重启浏览器固然可以,但效率低下。更优雅的方式是结合浏览器的开发者工具协议(CDP)命令来动态修改代理。
使用CDP命令动态设置代理(Chrome):
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
首次启动,可以不带代理或带初始代理
chrome_options = Options()
chrome_options.add_argument('--proxy-server=http://初始代理IP:端口')
driver = webdriver.Chrome(options=chrome_options)
执行一些操作...
driver.get("https://example.com")
动态切换到从天启代理获取的新IP
new_proxy = "新IP:新端口" 从天启代理API实时获取
driver.execute_cdp_cmd('Network.setProxy', {
"proxyConfiguration": {
"proxyType": "manual",
"httpProxy": new_proxy,
"sslProxy": new_proxy, HTTPS代理
"bypassList": []
}
})
重要:应用代理设置后,需要清空网络状态使其生效
driver.execute_cdp_cmd('Network.emulateNetworkConditions', {
'offline': False,
'latency': 0,
'downloadThroughput': -1,
'uploadThroughput': -1
})
后续请求将使用新代理
driver.get("http://httpbin.org/ip")
天启代理提供丰富的API接口,支持自定义提取IP的间隔、数量、地区等参数。你可以编写代码定时调用其API获取新鲜IP,然后利用上述CDP命令实现自动化任务中的IP自动切换,有效应对反爬策略。其多种去重模式能确保你获取的IP资源新鲜不重复。
最佳实践建议:
- IP池管理:不要单次只获取一个IP。建议利用天启代理的API,维护一个IP池,在IP失效或达到使用时长后自动从池中更换。
- 异常处理:在代码中增加try-except块,当网络请求失败时,捕获异常并触发更换代理IP的流程。
- 资源释放:使用完代理IP后,如果该IP是长效静态IP,注意业务逻辑结束后的资源释放,以提高资源利用率。
常见问题与解答 (QA)
Q1: 设置了代理,但浏览器无法访问任何网页,如何排查?
A1: 可以按以下步骤检查:1) 确认代理IP和端口号填写无误。2) 手动在系统网络设置中配置该代理,测试是否能正常上网,以判断代理IP本身是否可用。天启代理的IP可用率在99%以上,通常问题在于格式或网络环境。3) 检查代码中代理协议(http/https)是否与代理服务器类型匹配。4) 如果代理需要密码,确认已正确配置认证插件。
Q2: Selenium使用代理后,运行速度变慢了怎么办?
A2: 速度变慢可能源于代理服务器的网络延迟。选择像天启代理这样提供低延迟(≤10毫秒)服务的供应商是关键。尽量选用离你目标网站服务器地理位置较近的代理节点。天启代理在全国拥有200+城市自建机房节点,可以选择优质线路节点来提升速度。
Q3: 如何确保代理IP的匿名性和稳定性?
A3: 匿名性取决于代理服务器的类型。天启代理提供的优质代理IP资源,能有效隐藏用户的真实IP地址。稳定性则需要服务商的技术保障,天启代理采用自建机房纯净网络和分布式集群架构,不断优化核心系统与线路,保证了IP的优质稳定输出,非常适合对稳定性要求高的企业级自动化业务。
Q4: 在团队协作或云服务器中如何安全地使用代理?
A4: 切勿将代理的账号密码明文写在代码中提交到版本库。应将认证信息存储在环境变量或安全的配置管理服务中。天启代理支持终端IP授权,可以将服务器IP绑定到白名单,直接通过IP验证使用代理,无需在代码中暴露密码,这种方式更安全。


