好吧,我想不出任何更容易说出问题的人,但它并不像看起来那么复杂。基本上我有一个小项目可以帮助自己升级到我的工作场所(目前技术支持代理,希望兼职参与Web开发:我现在很渴望代码,技术支持并不令人满意)< / p>
所以我说我会制作一个小程序,在问题或网站问题出现时更新技术代理。它从一个叫做停机的小网页上获取信息(在我看来这是灾难性的,在wcc验证器上有177个错误)
网络开发人员不会只提供表格和ID,某种安全漏洞?不知道怎么样,但我不会质疑我上面的人。试图与他们合作,而不是反对他们。
表本身没有id,但是里面的列是do(span id),例如
<table width="100%" border="0">
<tbody>
<tr id="title">
<td width="9%">Date/Time</td>
<td width="24%">program/site</td>
<td width="5%">Ticket</td>
<td width="*">Issue</td>
<td width="2%">More</td>
</tr>
<tr>
<td><span id="date">2011-01-27 17:32</span></td>
<td><span id="site"><a id="fus_00001"></a>sample area or program affected</span></td>
<td><span id="site"><a href="https://sample php file i cant give you" target="_blank">12345671</a></span></td>
<td><span id="issue">problem identified/ investiating</span></td>
<td><span id="ticket"></span></td>
</tr><tr>
我正在使用java这个以及所有意图和目的,它绘制,做我需要的一切。解析我正在使用的信息htmlunit 2.8
这是我目前正在使用的代码。我只是不知道如何获得那些没有id的表。
String update = "blank";
final WebClient webClient = new WebClient();
webClient.setJavaScriptEnabled(false);// javascript causes some serious problems.
webClient.setCssEnabled(false);
HtmlPage page;
try
{
URL outageURL = new URL("file:\\C:\\Users\\MYDRIVE\\Desktop\\version control\\OUTAGE\\Outages.htm"); //local drive at home
page = webClient.getPage(outageURL);
//final HtmlTable table = page.getHtmlElementById("outages");// if the table had the id "outages, this would be perfect! but alas it doesnt
final HtmlTable table = page.get//the cells int eh table by some other means
update = (table.getCellAt(1,0).asText() + " " + table.getCellAt(1,1).asText() + " " + table.getCellAt(1,2).asText() + " " + table.getCellAt(1,3).asText());
// above code takes the cells and combines them
} catch and everything else
return update;
所以底线,有没有人知道如何通过其他方式访问这些表而没有id。也许跨度id? p.s我已经浏览了api hor html单元,并不确定我能找到任何有用的东西。
final String stringHtmlTable = page.getPage().asXml();
如果我这样做,我将如何根据标记的响应使用xpath将我带到所需的单元格。 附:根本不熟悉xml
答案 0 :(得分:2)
找到一个很好的xpath示例是非常难以理解的。
最后,通过span id的
获取每个细节 Object[] dates = page.getByXPath("//span[@id='date']/text()").toArray();
Object[] sites = page.getByXPath("//span[@id='site']/text()").toArray();
Object[] issues = page.getByXPath("//span[@id='issue']/text()").toArray();
System.out.println("" + dates[0].toString());
System.out.println("" + sites[0].toString());
System.out.println("" + issues[0].toString());
update = (dates[0].toString() + " " + sites[0].toString() + " " +issues[0].toString());
答案 1 :(得分:1)
如果您无法直接获取表格标签本身(例如通过ID),那么您可以深入挖掘内部对于该表格唯一的内容。例如,如果这是页面上唯一具有<td width="24%">program/site</td>
的表,则可以让XPath查找该单元格,然后使用getParent()向上挖掘到父<table>
元素。 / p>