Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建通过HtmlUnitDriver和HtmlUnit headless浏览器以不同方式呈现的类别(US)下的项目列表?_Java_Selenium_Selenium Webdriver_Htmlunit_Htmlunit Driver - Fatal编程技术网

Java 如何创建通过HtmlUnitDriver和HtmlUnit headless浏览器以不同方式呈现的类别(US)下的项目列表?

Java 如何创建通过HtmlUnitDriver和HtmlUnit headless浏览器以不同方式呈现的类别(US)下的项目列表?,java,selenium,selenium-webdriver,htmlunit,htmlunit-driver,Java,Selenium,Selenium Webdriver,Htmlunit,Htmlunit Driver,如何在通过HtmlUnitDriver和HtmlUnit headless浏览器以不同方式呈现的类别(US)下创建项目列表 使用GeckoDriver/Firefox和ChromeDriver/Chrome组合,我能够创建列表并打印如下: 代码试用: System.setProperty("webdriver.gecko.driver", "C:/Utility/BrowserDrivers/geckodriver.exe"); WebDriver driver = new FirefoxDr

如何在通过HtmlUnitDriver和HtmlUnit headless浏览器以不同方式呈现的类别(US)下创建项目列表

使用GeckoDriver/Firefox和ChromeDriver/Chrome组合,我能够创建列表并打印如下:

  • 代码试用:

    System.setProperty("webdriver.gecko.driver", "C:/Utility/BrowserDrivers/geckodriver.exe");
    WebDriver driver = new FirefoxDriver();
    driver.get("https://amzscout.net/sales-estimator");
    List<WebElement> elements = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("span.cat-pick_name-in")));
    for (WebElement ele:elements)
        System.out.println(ele.getAttribute("innerHTML"));
    driver.quit();
    
但是,使用HtmlUnitDriver和HtmlUnit headless浏览器,HTML呈现方式似乎有所不同,如下所示:

完整的html在

HTML的相关部分是:


//

// 正如您已经了解到的,您正在寻找的项目是由javascript创建的。这意味着您必须启用对HtmlUnit的javascript支持

第二点是以某种方式等待javascript完成。您使用的是“AllelementsLocatedBy的可见性”,文档状态为:

检查网页上与定位器匹配的所有元素是否可见

如果没有与选择器匹配的元素(或者不是所有元素,因为javascript仍在创建新的元素),则这是正确的。正因为如此,我稍微改变了等待条件,以真正等待元素被创建

我的最终来源如下所示,并创建了您所期望的列表:

String url = "https://amzscout.net/sales-estimator";                        

// true enables javascript support                                          
WebDriver driver = new HtmlUnitDriver(true);                                
try {                                                                       
    driver.get(url);                                                        

    // wait until the elements are created                                  
    List<WebElement> elements =
            new WebDriverWait(driver, 10)               
                .until(ExpectedConditions                                   
                    .numberOfElementsToBeMoreThan(                          
                            By.cssSelector("span.cat-pick_name-in"), 29));  

    System.out.println();                                                   
    for (WebElement ele : elements) {                                       
        System.out.println(ele.getAttribute("innerHTML"));
    }
} finally {                                                                 
    driver.quit();                                                          
}
stringurl=”https://amzscout.net/sales-estimator";                        
//true启用javascript支持
WebDriver驱动程序=新的HtmlUnitDriver(true);
试试{
获取(url);
//等待元素被创建
列表元素=
新WebDriverWait(驱动程序,10)
.直到(预期情况)
.NumberOfElement必须大于(
通过.cssSelector(“span.cat-pick_name-in”),29);
System.out.println();
对于(WebElement ele:elements){
System.out.println(ele.getAttribute(“innerHTML”);
}
}最后{
driver.quit();
}

希望这有助于……

很好的解释。工作顺利。
String url = "https://amzscout.net/sales-estimator";                        

// true enables javascript support                                          
WebDriver driver = new HtmlUnitDriver(true);                                
try {                                                                       
    driver.get(url);                                                        

    // wait until the elements are created                                  
    List<WebElement> elements =
            new WebDriverWait(driver, 10)               
                .until(ExpectedConditions                                   
                    .numberOfElementsToBeMoreThan(                          
                            By.cssSelector("span.cat-pick_name-in"), 29));  

    System.out.println();                                                   
    for (WebElement ele : elements) {                                       
        System.out.println(ele.getAttribute("innerHTML"));
    }
} finally {                                                                 
    driver.quit();                                                          
}