如何获取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();
我无法获取所需的行数和列数。我提供的xpath在站点上找不到该表 链接:如何获取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:
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