📜  python selenium 代理 (1)

📅  最后修改于: 2023-12-03 14:46:03.809000             🧑  作者: Mango

Python与Selenium的代理使用指南

Selenium是一个流行的自动化测试工具,而Python是一种非常流行的编程语言。在某些情况下,您可能需要使用代理来与网站或者应用程序进行交互以避免被防护机制屏蔽或获取更好的网络连接速度。在本指南中,我们将介绍如何在Python和Selenium中使用代理。

Python中的代理

Python中可以使用各种代理库来处理代理,这里我们将介绍其中最流行的三种代理库:requests, urllib 和http.client。下面是一个使用HTTP代理进行HTTP GET请求的示例:

import requests

url = 'http://httpbin.org/get'
proxy = {'http': 'http://IP:PORT'}
response = requests.get(url, proxies=proxy)
print(response.text)

其中IPPORT分别为代理服务器的IP和端口号,http代表使用HTTP协议。

如果你想使用SOCKS代理,只需将http替换为sokcs

import requests

url = 'http://httpbin.org/get'
proxy = {'http': 'socks://IP:PORT'}
response = requests.get(url, proxies=proxy)
print(response.text)

如果您想要在requests库中使用多个代理,您可以使用Requests-ProxyPool库,该库具有自动按比例分配代理和自动筛选不良代理的功能。以下是一个示例:

import requests
from proxy_requests import ProxyRequests

url = 'http://httpbin.org/get'
proxies = [
    'http://IP:PORT',
    'http://IP:PORT',
    'socks://IP:PORT',
    'http://IP:PORT',
]

for proxy in proxies:
    try:
        response = ProxyRequests(url, proxies={'http': proxy}).get()
    except Exception as e:
        continue

    if response.status_code == 200:
        break

print(response.text)

这段代码将尝试使用多个代理连接到URL,直到找到一个响应码为200的连接为止。

Selenium中的代理

使用代理与Selenium交互时,需要使用webdriver提供的额外选项来设置代理。以下是通过Selenium使用HTTP代理的例子:

from selenium import webdriver

PROXY = 'IP:PORT'
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=http://{proxy}'.format(proxy=PROXY))
driver = webdriver.Chrome(chrome_options=chrome_options)

其中IPPORT同样是代理服务器的IP和端口号。

如果你想使用SOCKS代理,只需将http代替为sokcs。本例子使用的是Chrome,如果你想使用其他浏览器,你需要查阅该浏览器对应的WebDriver支持的选项。

除了在ChromeOptions中设置代理之外,还可以设置FirefoxProfile或者IEOptions中的代理。

以下是通过Selenium使用多个代理的例子:

from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium import webdriver

PROXIES = [
    'http://IP:PORT',
    'http://IP:PORT',
    'socks://IP:PORT',
    'http://IP:PORT',
]

for proxy in PROXIES:
    proxy = Proxy({
        'proxyType': ProxyType.MANUAL,
        'httpProxy': proxy,
        'ftpProxy': proxy,
        'sslProxy': proxy,
    })

    try:
        driver = webdriver.Firefox(proxy=proxy)
        driver.get('http://example.com')
    except Exception as e:
        continue

    if driver.title == 'Example Domain':
        break

print(driver.page_source)

这个例子中,我们使用Firefox执行了多个代理,直到成功访问example.com为止。

结论

本指南介绍了如何在Python和Selenium中使用HTTP和SOCKS代理。使用代理连接目标是一项复杂的工作,要取得好的结果需要你对代理有一定的理解,尝试多种方法选出最好的代理。本指南中的代码仅适用于学习和测试,如果要在实际项目中使用,需要对代码进行修改和测试。

参考链接