在Selenium上设置代理的方法

您是否打算使用Selenium进行自动化测试或Web抓取?根据您特定的项目要求,您可能需要代理。现在就来发现我们的Selenium代理精选。

Selenium的重要性怎么强调都不过分。如果它没有被用于自动化测试,你会看到web scraper利用它们从JavaScript特色的网站上抓取数据。在广泛使用Selenium的两个领域中,都需要代理。

在某些情况下,你可以不使用代理;在其他情况下,除非您准备使用其他昂贵的选项,否则代理是必须的。本文将讨论可以与Selenium库一起使用的代理,使其有效地发挥作用。

在讨论代理之前,我们将对Selenium进行概述,以及为什么需要为Selenium提供代理。您还将学习如何设置Selenium以使用代理。


什么是Selenium?

Selenium是浏览器自动化工具。使用此工具,浏览器可以自动执行诸如填写表格,访问网站以及执行浏览器可以执行的各种任务之类的任务。它主要用于自动化测试。

它也可用于Web抓取,因为它可用于查看网页并具有某些Web抓取功能。Selenium支持许多浏览器,包括Chrome,Internet Explorer和Firefox。较旧的Selenium版本支持无头浏览器,例如PhantomJS。

它的语言支持也是它在开发人员中的流行之一,因为它提供了对Python,Java,JavaScript,C#和Ruby的支持。


为什么需要Selenium代理?

代理不是必须的。但是,根据项目要求,您将需要使用代理。如前所述,Selenium用于自动测试和刮纸。对于自动化测试,实际上,除非正在测试本地化,否则实际上不需要代理。

例如,您正在为不同地区开发站点,并且您想测试某些地区出现的语言是否是该地区使用的语言。除了本地化之外,实际上没有理由要使用代理进行自动化测试。

在网页抓取方面,如果需要本地化的网页内容,则还需要代理。当您打算在短时间内向网站发送过多请求时,也需要使用它们。


哪里可以找到更好的Selenium代理

实际上,没有什么比Selenium的最佳代理更好,因为Selenium本身不需要代理。您打算使用Selenium的站点确定了您应该使用的代理。因此,我们将为您提供跨数据中心和住宅代理类别的代理建议。


Selenium的住宅代理

住宅代理是Selenium Web驱动程序的首选代理。这是因为,与数据中心代理不同,住宅代理不容易被检测到。这是因为它们通过住宅IP路由客户的请求,并且这些IP类型比数据中心IP获得更多的信任。住宅代理非常适合访问Instagram,Google和YouTube等复杂站点。下面讨论了一些硒的住宅代理提供商。


1. Luminati

  • IP池规模:超过7200万
  • 地点:世界所有国家
  • 允许并发:无限
  • 允许的带宽:从20GB开始
  • 费用: 20GB,每月300美元起

Luminati可以说是市场上最好的住宅代理提供商。它是世界上最大的代理网络,池中有超过7200万个住宅IP地址。有两个原因使Luminati住宅代理非常适合Selenium。最重要的是Luminati在每个国家和世界上大多数城市都有代理。这意味着您可以在使用代理时定位到特定位置,这对于使用Selenium测试内容本地化来说是完美的选择。Luminati的代理服务器具有很高的可替换性,它将在每个Web请求后为您重新分配一个不同的IP地址,从而使其难以被阻止,因此非常适合于Web抓取。


2. Smartproxy

  • IP池大小:超过4000万
  • 地点:全球195个地点
  • 允许并发:无限
  • 允许的带宽:从5GB开始
  • 费用: 5GB每月75美元起

Smartproxy是另一种具有高级代理的住宅代理服务,非常适合使用智能反垃圾邮件系统访问网站以及使用Selenium进行内容本地化测试。就像Luminati一样,Smartproxy在全球大约195个国家/地区以及全球8个主要城市的代理中拥有良好的地理位置覆盖。他们也有高旋转代理。Smartproxy是希望使用高级代理但预算较小的代理提供商之一。只需75美元,您就可以从其中购买5GB内存。


3. Stormproxies

  • IP池大小: 20万
  • 地点:仅美国和欧盟地区
  • 允许并发:每个端口仅一台设备
  • 费用: 10个端口每月50美元起

Luminati和Smartproxy有一个共同的问题,它们的代理都具有可耗尽的带宽。就是说,他们的代理是经过计量的,并且在消耗分配给您的带宽之后,您将无法再次使用他们的代理,除非您支付额外的带宽。Stormproxies住宅代理具有无限的带宽-允许您无限使用带宽。但是,出于性能考虑,可以创建的线程数是有限的。Stormproxies住宅代理非常适合于网络抓取,可以与Selenium一起使用以访问大量站点。


4. Soax

  • IP池大小: 850万
  • 地点:仅美国和欧盟地区
  • 允许并发:每个端口仅一台设备
  • 费用: 5GB每月75美元起

Soax是目前发展最迅速的代理商之一,它拥有良好的地理位置覆盖,可以定位到国家,城市,区域或ISP,能满足你对代理的所有需求。最初它们的定价并不是那么合理,但它们已作出了最快的调整,现在定价模式Smartproxy相似,因此也获得了众多的追随者。Soax代理池的大小不是最出众的,只有850万,但却号称是最干净的,它能自动过滤被标记或滥用过的IP。同时它们的代理网络是安全和加密的。性能稳定可靠,并为您提供绝对的匿名性。


Selenium的数据中心代理

数据中心代理是您在市场上可获得的最便宜的代理。它们利用数据中心拥有的IP地址。由于它们的IP地址是由数据中心分配的,因此很容易检测和禁止它们。事实证明,其中一些逃避了侦查和禁令。其中一些已在上面讨论。


1. Myprivateproxy

  • 地点:仅美国和欧盟地区
  • 允许并发:最多100个线程
  • 允许的带宽:无限
  • 费用:每个代理人一个月$ 1.49

MyPrivateProxy可以说是市场上最好的数据中心代理提供商。它的代理服务器是最快的-它们也安全可靠。借助MyPrivateProxy数据中心代理,您可以将Selenium用于Web抓取非本地化的Web内容。这是因为MyPrivateProxy仅具有一些位置支持,因此,它不是用于自动化本地化测试的良好代理提供程序,但是它对于Web抓取非常有效。MyPrivateProxy的某些数据中心由绿色能源供电。他们的代理人很便宜。


2. Highproxies

  • 地点: 10个国家
  • 允许并发:无限
  • 允许的带宽:无限
  • 费用:每个代理人一个月$ 1.40

高代理数据中心代理对于Web抓取和自动化本地化测试都是不错的选择。这是因为与MyPrivateProxy不同,Highproxies在许多国家/地区都有代理,包括美国,加拿大,意大利,以色列,西班牙,德国,法国,荷兰,日本和澳大利亚。高代理在速度,可靠性和安全性方面表现良好。高代理数据中心代理不容易被网站阻止,因为它们不容易被检测到。像MyPrivateProxy一样,高代理可以毫无问题地用于某些复杂的网站,例如Facebook和Twitter。但是,它们比列表中的其他数据中心代理更昂贵。


3. InstantProxies

  • 地点:全球
  • 允许并发:无限
  • 允许的带宽:无限
  • 费用:每个代理人一个月$ 1.00

上面我说过MyPrivateProxy数据中心代理很便宜。InstantProxies实际上更便宜。实际上,只有10美元,您就可以使用10个代理。InstantProxies支持很多位置,但不能让您自己选择位置。在为您出售代理之前,InstantProxies会对代理进行测试,以确保它们正常工作,以避免浪费您的时间。就像MyPrivateProxy一样,它们的代理服务器仅适用于Web抓取而不是Selenium自动化测试。


如何在Selenium上设置代理

开发人员遇到的问题之一是如何在Selenium上设置代理。由于支持的浏览器和编程语言多种多样,因此如何设置代理等问题的答案也各不相同。


Chrome浏览器的Selenium代理设置

在本文的此部分中,我们将研究如何设置Selenium以便与使用Python驱动流行的Chrome浏览器的代理一起使用。

以下代码显示了如何在Selenium上设置代理。该代码适用于Chrome。

from selenium import webdriver

PROXY = "21.65.32.65:3124"

chrome_options = WebDriverWait.ChromeOptions()
chrome_options.add_argument('--proxy-server=%s' % PROXY)

chrome = webdriver.Chrome(chrome_options=chrome_options)
chrome.get("https://whatismyipaddress.com")

查看代码的最后一行,您可以看到该代码打开了WhatIsMyIpAdress网站,因此您可以看到Chrome正在使用您的首选代理。

添加选项

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
 
 
ops = Options()
# ops.add_argument('--headless')
# ops.add_argument('--no-sandbox')
# ops.add_argument('--disable-dev-shm-usage')
# ops.add_argument('--disable-gpu')
print('--proxy-server=http://%s' % proxy)
ops.add_argument('--user-agent=%s' % ua)
ops.add_argument('--proxy-server=http://%s' % proxy)
driver = webdriver.Chrome(executable_path=r"/root/chromedriver", chrome_options=ops)
driver.delete_all_cookies()
driver.maximize_window()
 
driver.get("https://whatismyipaddress.com")
print(driver.page_source)
driver.quit()

对于代理,主要注意这里:

opt .add_argument(“–proxy-server=http://ip:port”)
browser = webdriver.Chrome(chrome_options = opt )


Firefox 的 Selenium 代理设置

另外,您可以添加选项:

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
 
 
proxy = Proxy({
    'proxyType': ProxyType.MANUAL,
    'httpProxy': my_proxy,
    'noProxy': ''
})
 
driver = webdriver.Firefox(proxy = proxy, executable_path=r"/root/geckodriver")
driver.delete_all_cookies()
driver.maximize_window()
 
driver.get("https://whatismyipaddress.com")
print(driver.page_source)
driver.quit()

Selenium 私有代理设置

需要使用用户名和密码进行身份验证:

from selenium import webdriver
def create_proxyauth_extension(proxy_host, proxy_port,
                               proxy_username, proxy_password,
                               scheme='http', plugin_path=None):
    """Proxy Auth Extension
 
    args:
        proxy_host (str): domain or ip address, ie proxy.domain.com
        proxy_port (int): port
        proxy_username (str): auth username
        proxy_password (str): auth password
    kwargs:
        scheme (str): proxy scheme, default http
        plugin_path (str): absolute path of the extension      
 
    return str -> plugin_path
    """
    import string
    import zipfile
 
    if plugin_path is None:
        plugin_path = 'd:/webdriver/vimm_chrome_proxyauth_plugin.zip'
 
    manifest_json = """
    {
        "version": "1.0.0",
        "manifest_version": 2,
        "name": "Chrome Proxy",
        "permissions": [
            "proxy",
            "tabs",
            "unlimitedStorage",
            "storage",
            "",
            "webRequest",
            "webRequestBlocking"
        ],
        "background": {
            "scripts": ["background.js"]
        },
        "minimum_chrome_version":"22.0.0"
    }
    """
 
    background_js = string.Template(
    """
    var config = {
            mode: "fixed_servers",
            rules: {
              singleProxy: {
                scheme: "${scheme}",
                host: "${host}",
                port: parseInt(${port})
              },
              bypassList: ["foobar.com"]
            }
          };
 
    chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
 
    function callbackFn(details) {
        return {
            authCredentials: {
                username: "${username}",
                password: "${password}"
            }
        };
    }
 
    chrome.webRequest.onAuthRequired.addListener(
                callbackFn,
                {urls: [""]},
                ['blocking']
    );
    """
    ).substitute(
        host=proxy_host,
        port=proxy_port,
        username=proxy_username,
        password=proxy_password,
        scheme=scheme,
    )
    with zipfile.ZipFile(plugin_path, 'w') as zp:
        zp.writestr("manifest.json", manifest_json)
        zp.writestr("background.js", background_js)
 
    return plugin_path
 
proxyauth_plugin_path = create_proxyauth_extension(
    proxy_host="proxy.crawlera.com",
    proxy_port=8010,
    proxy_username="77409f72fe0c4a3e8413654411de0380",
    proxy_password=""
)
 
 
co = webdriver.ChromeOptions()
co.add_argument("--start-maximized")
co.add_extension(proxyauth_plugin_path)
 
 
driver = webdriver.Chrome(chrome_options=co)
driver.get("http://httpbin.org/get")

结    论

Selenium是可用于自动测试和Web抓取JavaScript特色网站的工具之一。根据您需要Selenium的用途,您可能需要使用代理。上面讨论的代理是您可以使用的一些最佳选择。