Ruby скрипт перехода с Mechanize 2.1 на 1.0 - выбор выпадающего списка - PullRequest
0 голосов
/ 03 февраля 2012

Из-за некоторых проблем с прокси, которые у меня были со скриптом Ruby, использующим Mechanize 2.1, я хочу преобразовать скрипт для использования Mechanize 1.0.Я уже добился определенного прогресса, но я застрял сейчас.

Скрипт сканирует страницу Amazon, чтобы перечислить и умножить все заказы за указанный промежуток времени.После входа в систему с помощью формы «Войти» мы переходим в «Ваш аккаунт» -> «Ваши заказы» и теперь пытаемся получить этот выпадающий список: dropdown box

Это HTML-код от Amazon:

<form id="order-dropdown-form" action="/gp/css/order-history" method="get">
    <input type="hidden" name="opt" value="ab">
    <label for="orderFilter">
        Date:
    </label>
    <select name="orderFilter" id="orderFilter">
        <option value="select-another" disabled="disabled">
            -Select different orders to view-
        </option>
        <option value="last30" selected="selected">
            Orders placed in the last 30 days
        </option>
        <option value="months-6">
            Orders placed in the past 6 months
        </option>
        <option value="year-2012">
            Orders placed in 2012
        </option>
        <option value="year-2011">
            Orders placed in 2011
        </option>
        (...)
    </select>
   <span class="in-amzn-btn btn-prim-med" unselectable="on"><input type="submit" value="Go"><span></span></span>
</form>

Код ruby ​​выглядит следующим образом:

select_form = orders_page.form_with(:id => 'order-dropdown-form')
select_form.field_with(:name => 'orderFilter').options.each do |option|

К сожалению, это не работает с Mechanize 1.0, нет метода "id". Так как еще я могу получить этот выпадающий список?

1 Ответ

0 голосов
/ 03 февраля 2012

Не ясно, что вам нужно делать. Если вам нужно установить значение, это:

select_form['orderFilter'] = value

Если вам нужно перебрать опции, это больше похоже на:

orders_page.search('select#orderFilter option').each do |option|
   select_form['orderFilter'] = option[:value]
end

Обратите внимание, что выполнение этого способа означает, что опция - это Nokogiri :: XML :: Node, а не Mechanize :: Form :: Option или что-то еще. Мне кажется, проще сделать это таким образом.

...