如何在seleniumlibrary/robotframework上禁用加载外部url

6

我开始尝试使用Selenium库测试(通过robotframework运行),由于我们的网站有广告、指标等等,每次运行测试时这些URL都会被加载。

有没有办法告诉Selenium/RobotFramework不要加载某些类型的URL或防止它加载外部资源(即所有非本地主机的资源)呢?

2个回答

10
你可以使用 browsermob-proxy 来实现这个功能。安装完之后,只需设置代理并添加黑名单即可。
ProxyServer server = new ProxyServer(9000)
server.start();
final DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, server.seleniumProxy());
//Send a 200 for all requests to the facebook cdn
server.blacklistRequests("http://.*\\.fbcdn.net/.*", 200); 
//Finish setting up your driver
WebDriver driver = new SomeDriverImpl(capabilities);

我相信以下内容可以与这个Python包装器配合使用(正则表达式可能略有不同):
from browsermobproxy import Server
server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()
proxy.blacklist('http://.*\\.fbcdn.net/.*', 200)
from selenium import webdriver
profile  = webdriver.FirefoxProfile()
profile.set_proxy(proxy.selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)
...
proxy.stop()
driver.quit()

你没有说明使用的是哪种编程语言,所以我假设是Java。这不正确吗?快速搜索显示有许多Python库的包装器。 - Scott
抱歉,是的我正在使用Python。感谢您的回复,一旦我尝试过它,我会将其标记为有效! - gforcada
2
你不应该转义fbcdn.net中的点,例如:server.blacklistRequests("https?://.*\\.fbcdn\\.net/.*", 200); - Lordalcol

2
在Chrome中现在可以用两行代码来完成这个操作:
driver.execute_cdp_cmd('Network.setBlockedURLs', {"urls": ["www.baidu.com"]})
driver.execute_cdp_cmd('Network.enable', {})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接