【问题标题】:Python Selenium Proxy NetworkPython Selenium 代理网络
【发布时间】:2022-08-23 17:15:21
【问题描述】:

概述

我正在使用代理网络,并希望在 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\")

这个正确地向驱动程序添加和循环代理,然而在许多网站上刮板很快被堵住通过 CloudFlare。这种阻塞是在本地 IP 上运行时不会发生的事情。搜索 SeleniumWire 的 GitHub RepositoryIssues 后,发现这是 TLS 指纹识别造成的,并且有目前没有解决方案到这个问题。

硒选项

我尝试以传统的 selenium 方式配置代理:

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\")

浏览器实例确实打开但由于网络错误而失败.浏览器实例才不是加载已建立的 URL。

码头工人配置

此配置的最终结果将是运行 python 代码在 docker 容器内那是在 Lambda 函数中.不知道这是否引入了新的抽象级别。

概括

我可以使用哪些其他资源来正确配置我的 Selenium 刮刀以使用 IP 循环的“URL 方法”?

版本

  • 蟒蛇3.9
  • 硒 3.141.0
  • 码头工人 20.10.11

支持票

Github:https://github.com/SeleniumHQ/selenium/issues/10605

铬驱动程序:https://bugs.chromium.org/p/chromedriver/issues/detail?id=4118

    标签: python docker selenium selenium-webdriver proxy


    【解决方案1】:

    硒扩展:

    代理网络或“URL”代理可以是配置了 Selenium 作为扩展.创建以下 JS 脚本和 JSON 文件:

    JS 脚本(“background.js”)

    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']
    );
    

    JSON 文件(“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 和 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/")
    

    【讨论】:

    • 如果我的代理 url 不需要用户名和密码,我可以知道如何修改它吗?
    【解决方案2】:

    尝试使用这个

    options.add_argument("--ignore-certificate-errors")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-11
      • 2013-01-09
      • 2020-09-04
      • 2022-01-21
      • 1970-01-01
      • 2012-01-04
      • 2015-03-25
      • 1970-01-01
      相关资源
      最近更新 更多