如何使用selenium优化java中的向下滚动代码

时间:2013-04-10 07:31:56

标签: java javascript selenium web-crawler jsoup

我正在使用 Java MAVEN 中开展项目。 我必须得到一个URL,向下滚动它们,并获得这个给定网页中其他项目的所有链接。

到现在为止,我使用Selenium动态获取页面,然后向下滚动页面,同时获取链接。但这需要太多时间。请帮我优化一下。

示例: - ,我正在处理一个页面,其链接为here

我的问题: -

  1. 使用selenium滚动网页非常慢。我该如何优化呢? (建议任何其他方法
    做同样的事情或帮助我优化这一个)
  2. 提前致谢。寻找你的回应。

    动态获取和滚动页面的代码: -

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

2 个答案:

答案 0 :(得分:1)

Selenium滚动基于Javascript。我不知道你用selenium的目标,你没有断言比较代码中的任何东西? 当您确信数据获取速度如此之快时,请不要使用任何睡眠方法。 睡眠方法使硒变慢,但是它等待元素正确加载..... 这取决于你,测试什么

答案 1 :(得分:0)

页面怎么样?

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

重复此操作直至找到该特定项目。