Как выбрать поле параметра внутри таблицы с помощью Mechanize?

0

Я пытаюсь выбрать <option value="20">Betaling ontvangen via Bank</option> из следующего html-кода (сгенерированного OpenCart) с помощью Mechanize:

<div class="vtabs-content" id="tab-history" style="display: block;">
  <div id="history">
  <table class="form">
    <tbody>
      <tr>
        <td>Bestelstatus:</td>

        <td><select name="order_status_id">
          <option value="23">Bestelling geannuleerd</option>

          <option value="17">Bestelling ontvangen</option>

          <option selected="selected" value="24">Bestelling verzonden</option>

          <option value="22">Betaling mislukt</option>

          <option value="20">Betaling ontvangen via Bank</option>

          <option value="19">Betaling ontvangen via PayPal</option>

          <option value="21">Betaling via Bank mislukt</option>

          <option value="18">Betaling via PayPal mislukt</option>

          <option value="25">Gereed voor afhalen (Delft)</option>

          <option value="26">Wachten op betaling</option>
        </select></td>
      </tr>

      <tr>
        <td>Mail naar klant:<span class="help">Wel zichtbaar voor klant bij
        de bestelinfo.</span></td>

        <td><input name="notify" type="checkbox" value="1"></td>
      </tr>

      <tr>
        <td>Opmerkingen</td>

        <td>
          <textarea cols="40" name="comment" rows="8" style="width: 99%"></textarea>

          <div style="margin-top: 10px; text-align: right;">
            <a class="button" id="button-history" name=
            "button-history">Geschiedenis bijwerken</a>
          </div>
        </td>
      </tr>
    </tbody>
  </table>
</div>

То, что я сейчас делаю, это:

puts single_order_page.field_with(:name => 'order_status_id').options[0].select

Это печатает:

exampleshop.rb:44:in 'block in <main>': undefined method 'field_with' for #<Mechanize::Page:0x007f8ea514abf0> (NoMethodError)
    from /Users/narekaramjan/.rvm/gems/ruby-2.0.0-p353@global/gems/mechanize-2.7.3/lib/mechanize.rb:442:in 'get'
    from exampleshop.rb:7:in '<main>'

И puts single_order_page выводит полный HTML-код страницы. Вы можете посмотреть полный код здесь: http://pastebin.com/pe5pjMzB.

pp single_order_page выдает этот код: http://pastebin.com/ezSWWqi0

Есть идеи?

ОБНОВИТЬ

Запрос POST для обновления статуса заказа:

$('#button-history').live('click', function() {
    $.ajax({
        url: 'index.php?route=sale/order/history&token=545c8c415eb6641f29efc9e0b1180d2b&order_id=260',
        type: 'post',
        dataType: 'html',
        data: 'order_status_id=' + encodeURIComponent($('select[name=\'order_status_id\']').val()) + '&notify=' + encodeURIComponent($('input[name=\'notify\']').attr('checked') ? 1 : 0) + '&append=' + encodeURIComponent($('input[name=\'append\']').attr('checked') ? 1 : 0) + '&comment=' + encodeURIComponent($('textarea[name=\'comment\']').val()),
        beforeSend: function() {
            $('.success, .warning').remove();
            $('#button-history').attr('disabled', true);
            $('#history').prepend('<div class="attention"><img src="view/image/loading.gif" alt="" /> Even wachten a.u.b.</div>');
        },
        complete: function() {
            $('#button-history').attr('disabled', false);
            $('.attention').remove();
        },
        success: function(html) {
            $('#history').html(html);

            $('textarea[name=\'comment\']').val('');

            $('#order-status').html($('select[name=\'order_status_id\'] option:selected').text());
        }
    });
});
Теги:
opencart
mechanize

2 ответа

0

Это потому, что field_with - это метод Form, а не метод Page.

Вы хотите сделать что-то вроде:

page = agent.get url
form = page.forms[0]
form['order_status_id'] = 20
next_page = form.submit
0

Я бы сделал это так:

page = single_order_page.parser

desired_element = page.search('//select[name="order_status_id"]/option[@value="20"]')

Затем сделайте все, что захотите, после этого.

  • 0
    Я хочу выбрать опцию и нажать на кнопку, чтобы отправить уведомление по электронной почте. Я использовал puts чтобы проверить, правильно ли я выбрал опцию. Не думаю, что код будет работать в этом случае, или я ошибаюсь?
  • 0
    Если я правильно понимаю, что вам нужно только значение, чтобы отправить запрос? «Правильный вариант» - это тот, который соответствует «Делать ставки через банк»?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню