白名单域Selenium / Firefox可以连接到

时间:2015-07-22 16:31:57

标签: selenium selenium-webdriver webdriver

我正在使用带有Firefox的Selenium webdriver。我想知道是否有一个设置我可以改变,以便它只从某些域请求资源。 (特别是我希望它只是请求与网页本身在同一域中的内容)。

我目前使用Python编写的设置是:

 from selenium import webdriver
 firefox_profile = webdriver.FirefoxProfile()
 ## Here, I change various default setting in Firefox, and install a couple of monitoring extensions
 driver = webdriver.Firefox(firefox_profile)
 driver.get(web_address)

我想要做的是,如果我指定网址wwww.domain.com,那么只加载由domain.com提供的内容,而不是由其他域通常会被请求的所有跟踪内容。希望可以通过更改firefox中的配置文件设置或通过扩展来实现。

注意 - 有一个类似的问题(没有答案) - Restricting Selenium/Webdriver/HtmlUnit to a certain domain - 但它已经四年了,我认为Selenium从那时起已经发展了很多。

2 个答案:

答案 0 :(得分:5)

感谢Vicky,(我使用的代理设置的方法 - 虽然直接来自Selenium),下面的代码将更改firefox中的代理设置,以便它不会连接到域,除了白名单。

我怀疑几个设置更改是不必要的,并且可以在大多数情况下省略。 Python中的代码。

   
    from selenium import webdriver
    firefox_profile = webdriver.FirefoxProfile()

    ## replace desired_domain.com below with whitelisted domain. Separate domains by comma.
    firefox_profile.set_preference("network.proxy.no_proxies_on","localhost,127.0.0.1,desired_domain.com")      

    firefox_profile.set_preference("network.proxy.backup.ftp","0.0.0.0")
    firefox_profile.set_preference("network.proxy.backup.ftp_port",1)
    firefox_profile.set_preference("network.proxy.backup.socks","0.0.0.0")
    firefox_profile.set_preference("network.proxy.backup.socks_port",1)
    firefox_profile.set_preference("network.proxy.backup.ssl","0.0.0.0")
    firefox_profile.set_preference("network.proxy.backup.ssl_port",1)
    firefox_profile.set_preference("network.proxy.ftp","0.0.0.0")
    firefox_profile.set_preference("network.proxy.ftp_port",1)
    firefox_profile.set_preference("network.proxy.http","0.0.0.0")
    firefox_profile.set_preference("network.proxy.http_port",1)
    firefox_profile.set_preference("network.proxy.socks","0.0.0.0")
    firefox_profile.set_preference("network.proxy.socks_port",1)
    firefox_profile.set_preference("network.proxy.ssl","0.0.0.0")
    firefox_profile.set_preference("network.proxy.ssl_port",1)
    firefox_profile.set_preference("network.proxy.type",1)
    firefox_profile.set_preference("network.proxy.share_proxy_settings",True)       

    driver = webdriver.Firefox(firefox_profile)
    driver.get(web_address_desired)

答案 1 :(得分:1)

我认为在selenium中仍然是不可能的。但是你仍然可以通过使用像browsermob这样的代理来实现这一点。 Webdriver与browsermob代理很好地集成。

java中的pseudeocode示例

    //LittleProxy-powered 2.1.0 release

    LegacyProxyServer server = new BrowserMobProxyServer();

    server.start(0);

    // Blacklist websites
    server.blacklistRequests("https?://.*\\.blocksite\\.com/.*", 410);//these sites will be blocked

    /// get the Selenium proxy object
    Proxy proxy = ClientUtil.createSeleniumProxy(server);

    // configure it as a desired capability
    DesiredCapabilities capabilities = new DesiredCapabilities();

    capabilities.setCapability(CapabilityType.PROXY, proxy);

    // initialize the driver with the capabilities   ;
    Webdriver driver = new FirefoxDriver(capabilities);

希望这可以帮到你。如果你需要任何进一步的帮助,请回来