Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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
如何获取webtable的动态Xpath? Listtable=driver.findElements(By.xpath(“/*[@id=\“prodDetails\”)/div[2]/div[1]/div/div[2]/div/div/table/tbody/tr”); JavascriptExecutor jse=(JavascriptExecutor)驱动程序; //executeScript(“参数[0].ScrollingToView();”,表); jse.executeScript(“参数[0].style.border='3px实心红色',表格); int行=table.size();_Java_Html_Selenium - Fatal编程技术网

如何获取webtable的动态Xpath? Listtable=driver.findElements(By.xpath(“/*[@id=\“prodDetails\”)/div[2]/div[1]/div/div[2]/div/div/table/tbody/tr”); JavascriptExecutor jse=(JavascriptExecutor)驱动程序; //executeScript(“参数[0].ScrollingToView();”,表); jse.executeScript(“参数[0].style.border='3px实心红色',表格); int行=table.size();

如何获取webtable的动态Xpath? Listtable=driver.findElements(By.xpath(“/*[@id=\“prodDetails\”)/div[2]/div[1]/div/div[2]/div/div/table/tbody/tr”); JavascriptExecutor jse=(JavascriptExecutor)驱动程序; //executeScript(“参数[0].ScrollingToView();”,表); jse.executeScript(“参数[0].style.border='3px实心红色',表格); int行=table.size();,java,html,selenium,Java,Html,Selenium,我无法获取所需的行数和列数。我提供的xpath在站点上找不到该表 链接: 我必须获取移动设备的规范。而不是此xpath: List<WebElement>table=driver.findElements(By.xpath("//*[@id=\"prodDetails\"]/div[2]/div[1]/div/div[2]/div/div/table/tbody/tr")); JavascriptExecutor jse = (JavascriptExecutor) driver;

我无法获取所需的行数和列数。我提供的xpath在站点上找不到该表

链接:


我必须获取移动设备的规范。

而不是此xpath:

List<WebElement>table=driver.findElements(By.xpath("//*[@id=\"prodDetails\"]/div[2]/div[1]/div/div[2]/div/div/table/tbody/tr"));
JavascriptExecutor jse = (JavascriptExecutor) driver;
// jse.executeScript("arguments[0].scrollIntoView();",table);
jse.executeScript("arguments[0].style.border='3px solid red'",table);
int row= table.size();
使用以下命令:

//*[@id=\"prodDetails\"]/div[2]/div[1]/div/div[2]/div/div/table/tbody/tr  
尽管我不建议您使用绝对xpath。您可以选择相对xpath,它更容易阅读

相对Xpath:

//*[@id="prodDetails"]/div[2]/div[1]/div/div[2]/div/div/table/tbody/tr  
在代码中,类似于:

//div[@id='prodDetails']/descendant::div[@class='pdTab'][1]/descendant::tbody/tr  
Listtable=driver.findElements(By.xpath(“//div[@id='prodDetails']/genderant::div[@class='pdTab'][1]/genderant::tbody/tr”);

代替绝对xpath:

List<WebElement>table=driver.findElements(By.xpath("//div[@id='prodDetails']/descendant::div[@class='pdTab'][1]/descendant::tbody/tr"));
我建议使用简单的相对xpath:

//*[@id=\"prodDetails\"]/div[2]/div[1]/div/div[2]/div/div/table/tbody/tr  

如果页面中没有其他表,则此xpath将起作用。否则,请确保这两个表都可以通过某些属性来区分

您可以使用下面的Xpath获得总行数

在上面的链接中,我们有多个具有相同类的部分,两个表也具有类似的定位器。因此,需要根据表名获取元素,如下所示

注意:无需使用
JavascriptExecutor

//*[@id='prodDetails']//table/tbody/tr  
输出:5


最后,您可以迭代上面的列表并提取表内容细节

XPATH可能很难阅读,特别是当您需要经常使用它时

你可以试试这个

或者,下面的代码更有用一些,因为我相信您可能也希望从该页面获得更多内容,并且通常希望得到包含数据的行:

    OS Android
    RAM 2 GB
    Item Weight 150 g
    Product Dimensions 7.2 x 14.2 x 0.9 cm
    Batteries: 1 AA batteries required. (included)
    Item model number G-550FY
    Wireless communication technologies Bluetooth, WiFi Hotspot
    Connectivity technologies GSM, (850/900/1800/1900 MHz), 4G LTE, (2300/2100/1900/1800/850/900 MHz)
    Special features Dual SIM, GPS, Music Player, Video Player, FM Radio, Accelerometer, Proximity sensor, E-mail
    Other camera features 8MP primary & 5MP front
    Form factor Touchscreen Phone
    Weight 150 Grams
    Colour Gold
    Battery Power Rating 2600
    Whats in the box Handset, Travel Adaptor, USB Cable and User Guide
现在,这将产生:

    HtmlEntityList entityList = new HtmlEntityList();
    HtmlEntitySettings product = entityList.configureEntity("product");

    PartialPath technicalDetailRows = product.newPath()
            .match("div").precededBy("div").withExactText("Technical Details")
            .match("tr");

    technicalDetailRows.addField("technical_detail_field").matchFirst("td").classes("label").getText();
    technicalDetailRows.addField("technical_detail_value").matchLast("td").classes("value").getText();

    HtmlParserResult results =  new HtmlParser(entityList).parse(new UrlReaderProvider("your_url")).get("product");

    System.out.println("-- " + Arrays.toString(results.getHeaders())  + " --");
    for(String[] row : results.getRows()){
        System.out.println(Arrays.toString(row));
    }

披露:我是这个图书馆的作者。这是一个商业封闭源代码,但可以节省大量开发时间。

您的目标是“技术详细信息”部分吗?是的。只有技术详细信息@MasterPoNote,这个//*[@id='prodDetails']//table/tbody/tr将提供21个条目,其中OP xpath只有16个条目。搜索其中一个“div”具有特定的id或类,将为您提供特定的表格Yep!用xpath和OP xpath检查一次。有一点不同。使用下面的xpath提取table://div[@class='section techD']///span[text()='Technical Details']/../../../..//table/tbody/trStill我没有得到第0行和第0列的任何信息。能否在查找元素列表之前添加显式等待?使用显式等待条件更新了答案。请现在检查。我得到了预期的响应:)
    HtmlElement e = HtmlParser.parseTree(new UrlReaderProvider("your_url"));

    List<HtmlElement> rows = e.query()
            .match("div").precededBy("div").withExactText("Technical Details")
            .match("tr").getElements();

    for(HtmlElement row : rows){
        System.out.println(row.text());
    }
    OS Android
    RAM 2 GB
    Item Weight 150 g
    Product Dimensions 7.2 x 14.2 x 0.9 cm
    Batteries: 1 AA batteries required. (included)
    Item model number G-550FY
    Wireless communication technologies Bluetooth, WiFi Hotspot
    Connectivity technologies GSM, (850/900/1800/1900 MHz), 4G LTE, (2300/2100/1900/1800/850/900 MHz)
    Special features Dual SIM, GPS, Music Player, Video Player, FM Radio, Accelerometer, Proximity sensor, E-mail
    Other camera features 8MP primary & 5MP front
    Form factor Touchscreen Phone
    Weight 150 Grams
    Colour Gold
    Battery Power Rating 2600
    Whats in the box Handset, Travel Adaptor, USB Cable and User Guide
    HtmlEntityList entityList = new HtmlEntityList();
    HtmlEntitySettings product = entityList.configureEntity("product");

    PartialPath technicalDetailRows = product.newPath()
            .match("div").precededBy("div").withExactText("Technical Details")
            .match("tr");

    technicalDetailRows.addField("technical_detail_field").matchFirst("td").classes("label").getText();
    technicalDetailRows.addField("technical_detail_value").matchLast("td").classes("value").getText();

    HtmlParserResult results =  new HtmlParser(entityList).parse(new UrlReaderProvider("your_url")).get("product");

    System.out.println("-- " + Arrays.toString(results.getHeaders())  + " --");
    for(String[] row : results.getRows()){
        System.out.println(Arrays.toString(row));
    }
    OS = Android
    RAM = 2 GB
    Item Weight = 150 g
    Product Dimensions = 7.2 x 14.2 x 0.9 cm
    Batteries: = 1 AA batteries required. (included)
    Item model number = G-550FY
    Wireless communication technologies = Bluetooth, WiFi Hotspot
    Connectivity technologies = GSM, (850/900/1800/1900 MHz), 4G LTE, (2300/2100/1900/1800/850/900 MHz)
    Special features = Dual SIM, GPS, Music Player, Video Player, FM Radio, Accelerometer, Proximity sensor, E-mail
    Other camera features = 8MP primary & 5MP front
    Form factor = Touchscreen Phone
    Weight = 150 Grams
    Colour = Gold
    Battery Power Rating = 2600
    Whats in the box = Handset, Travel Adaptor, USB Cable and User Guide