使用代理时,在Selenium WebDriver中停止无限获取

时间:2016-10-30 14:18:13

标签: java selenium selenium-webdriver webdriver selenium-firefoxdriver

更新:

当我使用代理时,get(url)永远不会完成的原因是网站的某些https部分(广告网络等)不喜欢代理。这就是为什么页面从未真正完成加载(实际上它确实如此,它只花了不长时间)

我在Firefox中使用Selenium Webdriver,当我尝试访问某些无限加载的网站时(除非有某种用户交互),我只是想阻止它们永远加载。我使用Webdriver的Java库,但使用Jython中的代码(因此没有';'或'new xxx')。

我试过

driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS)
driver.manage().timeouts().setScriptTimeout(15, TimeUnit.SECONDS)
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS)
driver.get(...)
driver.close()

但每次获取都不会停止。

我使用DesiredCapabilities通过代理浏览器启动:

proxyServer = '127.0.0.1:8080'
proxy = Proxy()
proxy.setHttpProxy(proxyServer)
proxy.setSslProxy(proxyServer)
capabilities = DesiredCapabilities()
capabilities.setCapability(CapabilityType.PROXY, proxy)
driver = FirefoxDriver(capabilities)

当我没有设置代理时,网站会正常处理。只有在使用代理时,网站才会停止并且永远不会完成get()。这对每个站点都没有问题,只有某些站点出现此问题。

知道是什么原因引起的吗?看起来代理设置阻止了浏览器或selenium发出get()完成信号的消息。

1 个答案:

答案 0 :(得分:0)

你可以等一个元素30秒,例如要加载的页面上的HTML标记。如果元素在30秒内没有加载,请捕获异常并继续。

try
{
    new WebDriverWait(driver, 30).until(ExpectedConditions.presenceOfElementLocated(By.tagName("html")));
}
catch (TimeoutException e)
{
    // do something when this exception is caught
}