【问题标题】:How to use browsermob with python-selenium behind a corporate proxy?如何在公司代理后面使用带有 python-selenium 的 browsermob?
【发布时间】:2023-03-29 17:12:01
【问题描述】:

我的测试环境在公司代理下(“proxy.ptbc.std.com:2538”)。我想在 YoTube 上打开特定视频一段时间(例如 200 秒) ) 并为每次访问捕获 har 文件,该过程重复多次以进行大规模测试。我尝试了这里找到的不同示例,但 firefox / chrome 浏览器无法连接到互联网,因为它们位于代理后面。

如何在公司代理后面运行“python-selenium + browsermobproxy”并捕获每个实例的 har 文件。

示例代码:

 from browsermobproxy import Server
    server = Server("C:\\Utility\\browsermob-proxy-2.1.4\\bin\\browsermob-proxy")
    server.start()
    proxy = server.create_proxy()

    from selenium import webdriver
    profile  = webdriver.FirefoxProfile()
    profile.set_proxy(proxy.selenium_proxy())
    driver = webdriver.Firefox(firefox_profile=profile)


    proxy.new_har("google")
    driver.get("http://www.google.co.in")
    proxy.har # returns a HAR JSON blob

    server.stop()
    driver.quit()

任何帮助将不胜感激

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver browsermob-proxy


    【解决方案1】:

    根据browsermob-proxy documentation

    有时您会希望通过上游代理路由请求 服务器。在这种情况下,通过添加 httpProxy 来指定您的代理服务器 创建代理请求的参数:

    [~]$ curl -X POST http://localhost:8080/proxy?httpProxy=yourproxyserver.com:8080
    {"port":8081}
    

    根据source code of browsermob-proxy API for Python

    def create_proxy(self, params=None):
        """
        Gets a client class that allow to set all the proxy details that you
        may need to.
    
        :param dict params: Dictionary where you can specify params
        like httpProxy and httpsProxy
        """
        params = params if params is not None else {}
        client = Client(self.url[7:], params)
        return client
    

    因此,您需要做的就是在 create_proxy 中指定 params,具体取决于您使用的代理(http 或 https):

    from browsermobproxy import Server
    from selenium import webdriver
    import json
    
    server = Server("C:\\Utility\\browsermob-proxy-2.1.4\\bin\\browsermob-proxy")
    server.start()
    # httpProxy or httpsProxy
    proxy = server.create_proxy(params={'httpProxy': 'proxy.ptbc.std.com:2538'})
    profile = webdriver.FirefoxProfile()
    profile.set_proxy(proxy.selenium_proxy())
    driver = webdriver.Firefox(firefox_profile=profile)
    
    proxy.new_har("google")
    driver.get("http://www.google.co.in")
    result = json.dumps(proxy.har, ensure_ascii=False)
    print(result)
    
    server.stop()
    driver.quit()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-28
      • 2021-05-30
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多