我正在使用带有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从那时起已经发展了很多。
答案 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);
希望这可以帮到你。如果你需要任何进一步的帮助,请回来