Как установить флажок с помощью WWW::Mechanize?

Я прочитал модуль Perl WWW::Mechanize, и вот его синтаксис:

$mech->tick( $name, $value [, $set] )

Но когда я проверил источник страницы веб-страницы, вот что я нашел:

<div class="key-name" title="GLOBAL_PROCESSING">GLOBAL_PROCESSING</div>
    <div class="col-50 col-left">
    <div class="string-controls">
    <a href="#" class="control-expand-toggle"></a>
    <a href="#" class="control-activity-toggle ">0</a>
    <input type="checkbox" class="control-select-string">
    </div>

Я не вижу идентификатор и значение для поля флажка. Как мне это сделать?

Также флажок не является частью какой-либо формы. Как я могу обратиться к этому флажку в Mechanize?

HTML-код

<div id="edit-controls-leftside" class="clear-fix">
<div class="col-left">
<label>
<input id="select-all-visible" class="" type="checkbox">
&nbsp;Select all visible
</label>
<a id="expand-all" class="blue-on-dark-blue text-link arrow-leftside-down"     href="#">Show key names</a>
<a id="show-modify-nav" class="blue-on-dark-blue text-link arrow-leftside-right disabled" href="#">Modify selected...</a>
<nav id="modify-nav" style="display: none;">
<a id="show-order-translation" class="sub-nav-item" href="#">Order translations</a>

person cppcoder    schedule 27.05.2012    source источник
comment
Если вы имеете дело с документом, который зависит от JavaScript, не используйте WWW::Mechanize, он не работает с JavaScript. Вместо этого используйте WWW::Mechanize::Firefox или WWW::Selenium.   -  person Quentin    schedule 31.05.2012
comment
Как узнать, является ли страница JS? Я не знаком с веб-разработкой.   -  person cppcoder    schedule 31.05.2012
comment
Два ключевых индикатора: (1) элементы управления формы, которых нет в формах, и (2) ссылки с href="#", которые не помечены как начало страницы.   -  person Quentin    schedule 31.05.2012
comment
@Quentin - я вижу оба этих индикатора на своей странице. Спасибо за этот совет. Могу ли я использовать WWW::Selenium для автоматизации веб-страниц? Я хочу завершить веб-поток, а не тестировать его.   -  person cppcoder    schedule 31.05.2012
comment
да. Вы просто игнорируете последний шаг процесса (где вы делаете утверждения).   -  person Quentin    schedule 31.05.2012


Ответы (3)


Почему вы пытаетесь это сделать?

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

Как вы думаете, используется ли этот флажок в JavaScript для переключения других флажков?

person Lee Goddard    schedule 14.12.2012

Вот некоторые обходные пути для проверки флажков без значений с помощью perl Mechanize.

Из Mechanize вручную.

Как установить флажок, для которого не определено значение?

Установите его на значение «включено».

$mech->field( my_checkbox => 'on' );

Другой вариант найден здесь.

$form->find_input('checkbox_id')->check();

Единственная проблема заключается в том, что у вашего флажка также нет имени/идентификатора. Надеюсь, что кто-то еще может присоединиться к тому, как захватить флажок, используя что-то другое, кроме имени/идентификатора. Я буду искать.

РЕДАКТИРОВАТЬ:

Вы можете использовать:

$mech->find_all_inputs( ... criteria ... )

Чтобы найти флажок по типу и/или имени класса, поскольку у него нет имени или идентификатора.

person christurnerio    schedule 27.05.2012

Используйте метод check в HTML::Form. Цитата из документации:

Некоторые типы ввода представляют собой переключатели, которые можно включать и выключать. Это включает в себя входы «флажок» и «опция». Вызов этого метода включает этот ввод без необходимости знать имя значения.

Код, который работает с вашим HTML:

my $w = WWW::Mechanize->new;
$w->get('file:///tmp/10775965.html');
[$w->forms->[0]->inputs]->[0]->check;
person daxim    schedule 28.05.2012
comment
Затем обойдите методы на основе форм. Используйте Wireshark, Firebug или аналогичный инструмент, чтобы узнать подробности о парах ключ/значение формы фактического результирующего HTTP-запроса при отправке формы, а затем скопируйте/имитируйте его с помощью submit_form(with_fields => \%form_kv). - person daxim; 30.05.2012
comment
Это HTML для флажка <input id="select-all-visible" class="selected" type="checkbox">. Но Mechanize::find_all_inputs() этого не перечисляет. Есть идеи, почему? Я также пытаюсь найти HTTP-запрос, как вы предложили. - person cppcoder; 31.05.2012
comment
Когда я устанавливаю флажок, ссылка становится активной. Но при переходе по ссылке я не вижу HTTP-запроса. Но он переходит на другую страницу. Это возможно? - person cppcoder; 31.05.2012