해지말라고
397
2018-10-12 17:44:49
0
255

selenium java 리눅스에서 파일 다운로드 문제


안녕하세요 프로젝트 진행 중 막히는게 있어서 질문드립니다. [답변이 없어 재업하였습니다 죄송합니다.]

현재 java로 selenium을 사용하여 linux에서 엑셀 파일을 다운로드 하는 작업을 하려고 합니다.

chromedriver 설정에서 downloadPath를 지정해 놓고 그곳에 다운로드 하려고 합니다.

지금 문제점이 윈도우에서 테스트 할 때 

driver.get("downloadUrl");

, driver.findElement(By.cssSelector("downlaodElement").click();

두가지 방법으로 접근하여 다운로드를 하고 정해진 경로에 들어가 다운로드 되는 것 까지 확인을 했습니다.

헌데 리눅스에 올려놓은 톰캣서버에 빌드를 시켰을 때 파일이 아예 다운로드가 안되고 에러메세지도 나오질 않습니다. 

다운로드 경로를 리눅스 경로로 맞춘 후 돌렸고, 윈도우에서는 잘 돌아가는 상태입니다.

리눅스에서는 selenium을 사용해서 다운로드 할 수가 없는 건가요?

그렇다면 해결책이 있을까요?


위와같은 방법으로 안돼서 여러가지 시도하던 중  urllink로 다운 받는 방법도 고려해서 테스트 했으나

 톰캣같은 파일은 제대로 .tar파일이 다운받아지지만 제가 다운받으려는 페이지는 확장자가 없는 파일만 다운받아졌습니다. 열어보니 .html이더군요 

위 상황에 대한 소스는 아래와 같습니다.

어떻게 하면 좋을까요 조언부탁드립니다.


	 /**
	  * 버퍼 사이즈
	  */
	 final static int size = 1024;

	 /**
	  * fileAddress에서 파일을 읽어, 다운로드 디렉토리에 다운로드
	  * 
	  * @param fileAddress
	  * @param localFileName
	  * @param downloadDir
	  */
	 public static void fileUrlReadAndDownload(String fileAddress,
	   String localFileName, String downloadDir) {
	  OutputStream outStream = null;
	  URLConnection uCon = null;

	  InputStream is = null;
	  try {

	   System.out.println("-------Download Start------");

	   URL Url;
	   byte[] buf;
	   int byteRead;
	   int byteWritten = 0;
	   Url = new URL(fileAddress);
	   outStream = new BufferedOutputStream(new FileOutputStream(
	     downloadDir + "\\" + localFileName));

	   uCon = Url.openConnection();
	   is = uCon.getInputStream();
	   buf = new byte[size];
	   while ((byteRead = is.read(buf)) != -1) {
	    outStream.write(buf, 0, byteRead);
	    byteWritten += byteRead;
	   }

	   System.out.println("Download Successfully.");
	   System.out.println("File name : " + localFileName);
	   System.out.println("of bytes  : " + byteWritten);
	   System.out.println("-------Download End--------");

	  } catch (Exception e) {
	   e.printStackTrace();
	  } finally {
	   try {
	    is.close();
	    outStream.close();
	   } catch (IOException e) {
	    e.printStackTrace();
	   }
	  }
	 }

	 /**
	  * 
	  * @param fileAddress
	  * @param downloadDir
	  */
	 public static void fileUrlDownload(String fileAddress, String downloadDir) {

	  int slashIndex = fileAddress.lastIndexOf('/');
	  int periodIndex = fileAddress.lastIndexOf('.');

	  // 파일 어드레스에서 마지막에 있는 파일이름을 취득
	  String fileName = fileAddress.substring(slashIndex + 1);

	  if (periodIndex >= 1 && slashIndex >= 0
	    && slashIndex < fileAddress.length() - 1) {
	   fileUrlReadAndDownload(fileAddress, fileName, downloadDir);
	  } else {
	   System.err.println("path or file name NG.");
	  }
	 }
	@Test
	public void test() {
		
		// 파일 어드레스
		  String url = "fileUrl";
		  // 다운로드 디렉토리
		  String downDir = "D:/ExcelTest";

		  // 다운로드 호출
		  fileUrlDownload(url, downDir);
	}

-----추가로 크롬 prefs설정은 다음과 같습니다.

"profile.default_content_settings.popups", 0

"download.default_directory", downloadPath

"download.prompt_for_download", false

"download.directory_upgrade", true

"safebrowsing.enabled", true

0
0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.