0

私はJavaでプロジェクトをやっています。このプロジェクトでは、DOM を使用する必要があります。そのために、まず、Selenium を使用して、任意の URL の動的ページを読み込みます。次に、Jsoup を使用してそれらを解析します。

指定したURLの動的ページのソースコードを取得したい

コードのスナップショット:

public static void main(String[] args) throws IOException {

     // Selenium
     WebDriver driver = new FirefoxDriver();
     driver.get("ANY URL HERE");  
     String html_content = driver.getPageSource();
     driver.close();

     // Jsoup makes DOM here by parsing HTML content
     Document doc = Jsoup.parse(html_content);

     // OPERATIONS USING DOM TREE
}

しかし問題は、Selenium が全体の処理時間の約 95% を占めていることです。これは望ましくありません。

Selenium は、最初に Firefox を開き、指定されたページをロードして、動的ページのソース コードを取得します。

このツールを別の効率的なツールに置き換えることで、Selenium にかかる時間を短縮する方法を教えてください。他のアドバイスも大歓迎です。

編集 NO. 1

このリンクにはいくつかのコードがあります。

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("general.useragent.override", "some UA string");
WebDriver driver = new FirefoxDriver(profile);

しかし、ここの2行目は何ですか、わかりませんでした。ドキュメンテーションもセレンが非常に貧弱です。

編集2

System.out.println("%s を取得しています..." + url1); System.out.println("%s を取得しています..." + url2);

    WebDriver driver = new FirefoxDriver(createFirefoxProfile());

    driver.get("url1");  
    String hml1 = driver.getPageSource();

    driver.get("url2");
    String hml2 = driver.getPageSource();
    driver.close();

    Document doc1 = Jsoup.parse(hml1);
    Document doc2 = Jsoup.parse(hml2);
4

2 に答える 2

1

これを試して:

public static void main(String[] args) throws IOException {

    // Selenium
    WebDriver driver = new FirefoxDriver(createFirefoxProfile());
    driver.get("ANY URL HERE");
    String html_content = driver.getPageSource();
    driver.close();

    // Jsoup makes DOM here by parsing HTML content
    // OPERATIONS USING DOM TREE
}

private static FirefoxProfile createFirefoxProfile() {
    File profileDir = new File("/tmp/firefox-profile-dir");
    if (profileDir.exists())
        return new FirefoxProfile(profileDir);
    FirefoxProfile firefoxProfile = new FirefoxProfile();
    File dir = firefoxProfile.layoutOnDisk();
    try {
        profileDir.mkdirs();
        FileUtils.copyDirectory(dir, profileDir);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return firefoxProfile;
}

createFireFoxProfile() メソッドは、プロファイルが存在しない場合にプロファイルを作成します。プロファイルが既に存在する場合に使用します。そのため、セレンは毎回 profile-dir 構造を作成する必要はありません。

于 2013-04-05T10:13:07.227 に答える
0

コードに自信がある場合は、phantomjs を使用できます。これはヘッドレス ブラウザであり、クイック ヒットで結果を取得します。FF の実行には時間がかかります。

于 2015-02-23T14:15:11.957 に答える