Как getelementbyid () из таблицы без идентификатора - PullRequest
0 голосов
/ 27 января 2011

Ну, я не могу придумать более простой способ сформулировать этот вопрос, ребята, но это не так сложно, как кажется. По сути, у меня есть небольшой проект, который поможет мне продвинуться на своем рабочем месте (агент технической поддержки в настоящее время ищет возможности работать неполный рабочий день в веб-разработке: в данный момент мне не хватает кода, а техническая поддержка не удовлетворяет)

Поэтому я сказал, что сделаю небольшую программу, которая будет информировать технических агентов о проблемах или проблемах сайта, когда они возникнут. Он берет информацию с небольшой веб-страницы, называемой отключением (что, на мой взгляд, губительно, 177 ошибок в валидаторе wcc)

Ребята из веб-разработчика не просто дадут таблицу и идентификатор, какая-то дыра в безопасности? Не знаю как, но я не собираюсь расспрашивать парней над собой. Пытаюсь работать с ними, а не против них.

Сама таблица не имеет идентификатора, но внутри столбцов есть идентификатор (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

Вот код, который я сейчас использую. Я просто не знаю, как получить эти таблицы без идентификатора.

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;

Итак, суть в том, есть ли у кого-нибудь идеи о том, как получить доступ к этим таблицам другим способом без идентификатора. Может быть, идентификатор диапазона? ps Я просматривал HTML-модуль api hor, не совсем уверен, что смогу найти что-нибудь полезное.


final String stringHtmlTable = page.getPage().asXml();

Если бы я должен был это сделать, как бы я использовал xpath, чтобы перевести меня в нужную ячейку в соответствии с ответом метки. постскриптум совсем не знаком с xml

Ответы [ 2 ]

2 голосов
/ 31 января 2011

найти хороший пример xpath было абсолютно нелепо.

В конце концов, он получил детали каждого из них с идентификатором диапазона

        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 голос
/ 27 января 2011

Если вы не можете получить непосредственно сам тег таблицы (например, по идентификатору), то вы можете копать глубже в поисках чего-то уникального только для этой таблицы.Например, если это единственная таблица на странице, которая будет иметь <td width="24%">program/site</td>, вы можете использовать XPath для поиска этой ячейки, а затем использовать getParent () для возврата вверх к родительскому элементу <table>.

...