webmagic:org.openqa.selenium.TimeoutExceptopm:timeout

启动爬虫后,在服务器查看日志,总是卡在timeoutException,然后整个进程就block住,不再往下执行:

猜想是浏览器打开网址后,文档正常下载,但是js、css、图片等静态资源没有正常下载,而是一直在加载,导致超时报错,而且没有捕捉这个异常,导致这一个线程死掉。

在downloader的download方法中,

webDriver.get(request.getUrl());

这个打开网页的指令并没有加上超时设置以及超时的异常捕获

,将这一句代码扩展:

   //记录开始打开网址的时间
 long startTime = System.currentTimeMillis();
		try{
            //增加最大10s的页面加载时间,在10s内没有报错的话就会报错
			webDriver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
            //打开网址
			webDriver.get(request.getUrl());
		}catch(Exception e){
			//e.printStackTrace();
			logger.info(" can not download page in 10s :" + request.getUrl());
            //尝试获取页面,不适用于js加载的页面
			try{
				WebElement webElement = webDriver.findElement(By.xpath("/html"));
				String content = webElement.getAttribute("outerHTML");
				if(null!=content&&content.trim()!=""){
					logger.info("trying to get html :"+content.trim().length());
					Page page = new Page();
					page.setRawText(content);
					page.setHtml(new Html(content, request.getUrl()));
					page.setUrl(new PlainText(webDriver.getCurrentUrl()));
					page.setRequest(request);
					return page;
				}else{
					logger.info("trying to get html : null/0");
					return null;
				}
			}catch(Exception ee){
				logger.info("trying to get html fail:"+webDriver.getCurrentUrl());
				return null;
			}finally {
				//返回资源
				//超时的话则将driver 返回到线程池
     
                webDriverPool.returnToPool(webDriver);
			}
		}finally {
			long endTime = System.currentTimeMillis();
			logger.info("download page :"+request.getUrl()+" time:" + (endTime - startTime) + " ");


		}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艳阳高照中最亮的星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值