0

Javaを使用してMAVENでプロジェクトに取り組んでいます。URL を取得して下にスクロールし、この特定の Web ページ内の他のアイテムのすべてのリンクを取得する必要があります。

これまで、 Selenium を使用して動的にページを取得し、それらを下にスクロールして、リンクも取得しました。しかし、時間がかかりすぎます。それを最適化するのを手伝ってください。

例:-、リンクがここにあるページに取り組んでいます。

私の質問:-

  1. Selenium を使用した Web ページのスクロールは非常に遅いです。これを最適化するにはどうすればよいですか?(同じことを行う他の方法を提案するか
    、これを最適化するのに役立ちます)

前もって感謝します。あなたの親切な対応を求めています。

ページを動的に取得してスクロールするコード:-

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import com.google.common.collect.*;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;

/**
 *
 * @author jhamb
 */
public class Scroll_down {

    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;
    }



    public static void main(String[] args)  throws InterruptedException{
        String url1 = "http://www.jabong.com/men/shoes/men-sports-shoes/?source=home-leftnav";
        System.out.println("Fetching %s..." + url1);
        WebDriver driver = new FirefoxDriver(createFirefoxProfile());


        driver.get(url1);  

        JavascriptExecutor jse = (JavascriptExecutor)driver;
        jse.executeScript("window.scrollBy(0,250)", "");
        for (int second = 0;; second++) {
            if (second >= 60) {
                break;
            }
            jse.executeScript("window.scrollBy(0,200)", "");
            Thread.sleep(1000);
        }
            String hml = driver.getPageSource();
        driver.close();


        Document document = Jsoup.parse(hml);

            Elements links = document.select("div");

        for (Element link : links) {
            System.out.println(link.attr("data-url"));
        }
    }
}
4

2 に答える 2

1

Selenium のスクロールは Javascript に基づいています。セレンでの目標はわかりませんが、コード内で何かを比較するアサーションはありませんか? データのフェッチが非常に高速であると確信している場合は、スリープ メソッドを使用しないでください。スリープメソッドはセレンを遅くしますが、要素が適切にロードされるまで待機しています.....何をテストするかはあなた次第です

于 2013-04-11T14:31:19.497 に答える
0

ページダウンはどうですか?

ele.sendKeys(Keys.PAGE_DOWN);   //WebElement ele = <Any existing element>

特定のアイテムが見つかるまでこれを繰り返します。

于 2014-04-04T06:34:13.517 に答える