2015-01-11 2 views
0

Java에서 자체 crawljax 3.6 플러그인을 작성하려고합니다. 그것은 매우 유명한 웹 크롤러 인 crawljax에게 그가 웹 페이지에서 찾은 파일을 다운로드하도록 알려 주어야합니다. (PDF, 이미지 등). 나는 HTML이나 실제 DOM-Tree 만 원하지 않는다. 그가 찾은 파일 (PDF, jpg)에 대한 액세스 권한을 얻고 싶습니다.Crawljax를 사용하여 웹 페이지에서 파일을 다운로드하십시오.

어떻게하면 PDF 파일, 이미지 등을 다운로드 할 수 있습니까?

어떤 도움을 주셔서 감사합니다!

내가 기본 플러그인 (CrawlOverview)를 사용하여 지금까지 -a 새로운 클래스가 무엇 :

이미지에 관한 한
import java.io.File; 
import java.io.IOException; 
import java.util.concurrent.TimeUnit; 

import org.apache.commons.io.FileUtils; 

import com.crawljax.browser.EmbeddedBrowser.BrowserType; 
import com.crawljax.condition.NotXPathCondition; 
import com.crawljax.core.CrawlSession; 
import com.crawljax.core.CrawljaxRunner; 
import com.crawljax.core.configuration.BrowserConfiguration; 
import com.crawljax.core.configuration.CrawljaxConfiguration; 
import com.crawljax.core.configuration.CrawljaxConfiguration.CrawljaxConfigurationBuilder; 
import com.crawljax.core.configuration.Form; 
import com.crawljax.core.configuration.InputSpecification; 
import com.crawljax.plugins.crawloverview.CrawlOverview; 

/** 
* Example of running Crawljax with the CrawlOverview plugin on a single-page 
* web app. The crawl will produce output using the {@link CrawlOverview} 
* plugin. 
*/ 
public final class Main { 
    private static final long WAIT_TIME_AFTER_EVENT = 200; 
    private static final long WAIT_TIME_AFTER_RELOAD = 20; 
    private static final String URL = "http://demo.crawljax.com"; 

    /** 
    * Run this method to start the crawl. 
    * 
    * @throws IOException 
    *    when the output folder cannot be created or emptied. 
    */ 
    public static void main(String[] args) throws IOException { 
     CrawljaxConfigurationBuilder builder = CrawljaxConfiguration 
       .builderFor(URL); 
     builder.addPlugin(new CrawlOverview()); 


     builder.crawlRules().insertRandomDataInInputForms(false); 
     // click these elements 
     builder.crawlRules().clickDefaultElements(); 
     builder.crawlRules().click("div"); 
     builder.crawlRules().click("a"); 
     builder.setMaximumStates(10); 
     builder.setMaximumDepth(3); 
     // Set timeouts 
     builder.crawlRules().waitAfterReloadUrl(WAIT_TIME_AFTER_RELOAD, 
       TimeUnit.MILLISECONDS); 
     builder.crawlRules().waitAfterEvent(WAIT_TIME_AFTER_EVENT, 
       TimeUnit.MILLISECONDS); 


     // We want to use two browsers simultaneously. 
     builder.setBrowserConfig(new BrowserConfiguration(BrowserType.FIREFOX, 
       1)); 
     CrawljaxRunner crawljax = new CrawljaxRunner(builder.build()); 
     crawljax.call(); 

    } 
} 
+0

모든 데이터를 얻고 표시하는 방법은 무엇입니까? http://stackoverflow.com/questions/27936719/how-to-get-crawl-content-in-crawljax – BasK

답변

0

- 나는 어떤 문제가 표시되지 않습니다를 Crawljax 나를 위해이 잘로드 .

PDF 내용 : 불행히도 Crawljax는 하드 코딩되어 PDF 파일 링크를 건너 뜁니다.

참조 com.crawljax.core.CandidateElementExtractor : 342 :이 Crawljax 소스를 수정하고 상기 패턴에 대한 구성 옵션을 도입함으로써 해소 될 수

/** 
* @param href 
*   the string to check 
* @return true if href has the pdf or ps pattern. 
*/ 
private boolean isFileForDownloading(String href) { 
    final Pattern p = Pattern.compile(".+.pdf|.+.ps|.+.zip|.+.mp3"); 
    Matcher m = p.matcher(href); 

    if (m.matches()) { 
     return true; 
    } 

    return false; 
} 

.

HTML 이외의 파일에 관한 Selenium의 제한 사항이 적용됩니다. PDF는 Firefox JavaScript PDF 뷰어에서 보거나 다운로드 팝업이 나타나거나 파일이 다운로드됩니다. 자바 스크립트 뷰어와 상호 작용하는 것은 다소 가능합니다. 다운로드 팝업과 상호 작용할 수 없지만 자동 다운로드가 활성화되어 있으면 파일이 디스크로 다운로드됩니다.

자동으로 다운로드 대화 상자 진열하지 않고 파일을 다운로드하는 파이어 폭스를 설정하려는 경우 :

import javax.inject.Provider; 

static class MyFirefoxProvider implements Provider<EmbeddedBrowser> { 

    @Override 
    public EmbeddedBrowser get() { 
     FirefoxProfile profile = new FirefoxProfile(); 
     profile.setPreference("browser.download.folderList", 2); 
     profile.setPreference("browser.download.dir", "/tmp"); 
     profile.setPreference("browser.helperApps.neverAsk.saveToDisk", 
      "application/octet-stream,application/pdf,application/x-gzip"); 

     // disable Firefox's built-in PDF viewer 
     profile.setPreference("pdfjs.disabled", true); 
     // disable Adobe Acrobat PDF preview plugin 
     profile.setPreference("plugin.scan.plid.all", false); 
     profile.setPreference("plugin.scan.Acrobat", "99.0"); 

     FirefoxDriver driver = new FirefoxDriver(profile); 

     return WebDriverBackedEmbeddedBrowser.withDriver(driver); 
    } 
} 

을 그리고 새로 만든 FirefoxProvider 사용하여 수동으로 Jsoup를 사용하여 링크를 얻

BrowserConfiguration bc = 
new BrowserConfiguration(BrowserType.FIREFOX, 1, new MyFirefoxProvider()); 
0

getStrippedDom()에있는 CSS 선택기 a[href]을 사용하여 요소를 반복하고 HttpURLConnection/HttpsURLConnection을 사용하여 다운로드합니다.

관련 문제