Press "Enter" to skip to content

在 Chrome WebDriver 中强制使用 HTTP

我用chrome driver 通过chrome打开一个网页,他会自动帮我打开https的,但是这个站点https会报错,我想强制打开http的,如何实现? 我发现 Preferences里面配置http_allowed + 我的站点就可以实现,如何程序自动实现这个配置? 还是说有其他办法吗?

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

def configure_chrome_for_http():
    # 创建 Chrome 选项对象
    chrome_options = Options()
    
    # 方法1: 使用 preferences 设置允许 HTTP
    prefs = {
        "profile.default_content_settings.popups": 0,
        "profile.content_settings.exceptions.automatic_downloads.*.setting": 1,
        "profile.default_content_setting_values.notifications": 2,
        "profile.managed_default_content_settings.images": 1,
        "profile.default_content_settings.cookies": 1,
        "profile.managed_default_content_settings.javascript": 1,
        "profile.managed_default_content_settings.plugins": 1,
        "profile.managed_default_content_settings.popups": 2,
        "profile.managed_default_content_settings.geolocation": 2,
        "profile.managed_default_content_settings.media_stream": 2,
        "profile.default_content_setting_values.automatic_downloads": 1,
        "profile.content_settings.exceptions.http_allowed": {
                "https://your-site.com:443,*": {
                    "last_modified": "13377768014006403",
                    "setting": {
                    "decision_expiration_time": "13379064014006394"
                    }
                }
            }
    }
    chrome_options.add_experimental_option("prefs", prefs)
    
    # 方法2: 添加命令行参数来忽略证书错误
    chrome_options.add_argument('--ignore-certificate-errors')
    chrome_options.add_argument('--ignore-ssl-errors')
    chrome_options.add_argument('--allow-insecure-localhost')
    
    # 方法3: 禁用 web 安全性(不推荐用于生产环境)
    chrome_options.add_argument('--disable-web-security')
    
    # 创建 WebDriver 实例
    service = Service('path_to_chromedriver')  # 替换为你的 chromedriver 路径
    driver = webdriver.Chrome(service=service, options=chrome_options)
    
    return driver

# 使用示例
def example_usage():
    driver = configure_chrome_for_http()
    try:
        # 使用 http 而不是 https
        driver.get("http://your-site.com")  # 替换为你的网站URL
        
        # 进行其他操作...
        
    finally:
        driver.quit()

if __name__ == "__main__":
    example_usage()

我提供了三种主要方法来处理这个问题:

  1. 使用 preferences 配置(你提到的方法):
    • 通过 add_experimental_option("prefs", prefs) 设置,可以允许特定域名使用 HTTP
    • 需要在 prefs 字典中设置 “http_allowed” 列表
  2. 使用命令行参数:
    • 添加忽略证书错误的参数
    • 这种方法更简单,但可能不够精确
  3. 禁用 web 安全性:
    • 这是最激进的方法,不建议在生产环境中使用
    • 只适合在开发测试环境中使用

建议优先使用第一种方法,因为它更安全且可控。你只需要将代码中的 “your-site.com” 替换为你的实际域名即可。

需要注意的是,强制使用 HTTP 可能会带来安全风险,建议只在开发环境中使用,或者确保在受控的网络环境中使用。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注