更新:
当我使用代理时,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()完成信号的消息。
答案 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
}