Как смоделировать щелчок по ссылке "a" с помощью Perl WWW :: HtmlUnit - PullRequest
2 голосов
/ 31 августа 2011

Я работаю с Perl и библиотекой WWW :: HtmlUnit для доступа к следующему сайту: https://www.cnatra.navy.mil/scheds/schedule_data.aspx?sq=VT-7

Я могу загрузить страницу, нажать на кнопки «Просмотр расписания» и «Поиск», но я не могу нажать на один из пронумерованных дней в календаре ctrl.

Я просматривал функцию click (), но я должен определить ссылку, по которой я хочу щелкнуть, как элемент, прежде чем эта функция будет вызвана.

Есть идеи, как я мог заставить программу найти и щелкнуть эти ссылки?

Вот код с сайта, описывающий ссылку, по которой я хотел бы перейти:

<td align="center" style="width:14%;">
    <a href="javascript:__doPostBack('ctrlCalendar','4241')"
       style="color:Black" title="August 12">12</a>
</td>

Вот упрощенный код, который я вставлю в него:

use WWW::HtmlUnit;
use Inline::Java;

my $webClient = WWW::HtmlUnit->new;
$webClient->setUseInsecureSSL(1);
my $page = $webClient->getPage("https://www.cnatra.navy.mil/scheds
/schedule_data.aspx?sq=vt-7");

###define $daylink element here. This is the calendar link I want to click

my $sched = $daylink->click();  
my $content = $sched->asXml;
print "\n$content\n\n";

1 Ответ

1 голос
/ 31 августа 2011

Поскольку ни таблица, ни TR / TD, ни ссылки не имеют идентификаторов / имен, вам необходимо найти соответствующий элемент с помощью поиска по атрибутам.К счастью, HTMLUnit предоставляет API только для этого: getOneHtmlElementByAttribute.

Попробуйте что-то вроде этого (не проверено, поскольку у меня нет доступа)

my $ancestor = $page->getBody();
my $daylink = $ancestor->getOneHtmlElementByAttribute('a', 'title', 'August 12');
...