开发者

Ruby script to select and submit options from selection lists

开发者 https://www.devze.com 2023-03-05 13:11 出处:网络
it\'s my first time posting a question here! I am trying to do a certain ruby script that travels through a website to get information, but I found that this website has a certain select list with sub

it's my first time posting a question here! I am trying to do a certain ruby script that travels through a website to get information, but I found that this website has a certain select list with submit buttons and I'd like to know how I can select a certain item from the list and issue a click on one of the submit buttons and then save the returned page to a variable.

The select list is as follows:

<table width="700" border="0" cellspacing="0" cellpadding="2" class="caixa">
<tr>
    <td align="center">
        <br>
        <select name="CodEstab" size="9" class="inputtext">
        <option value='0110' selected>0110 - Universidade dos Açores - Angra do Heroísmo<option value='0130'>0130 - Universidade dos Açores - Ponta Delgada<option value='0200'>0200 - Universidade do Algarve<option value='0201'>0201 - Universidade do Algarve - Faculdade de Ciências Humanas e Sociais<option value='0203'>0203 - Universidade do Algarve - Faculdade de Ciências e Tecnologia<option value='0204'>0204 - Universidade do Algarve - Faculdade de Economia<option value='0300'>0300 - Universidade de Aveiro<option value='0400'>0400 - Universidade da Beira Interior<option value='0501'>0501 - Universidade de Coimbra - Faculdade de Ciências e Tecnologia<option value='0502'>0502 - Universidade de Coimbra - Faculdade de Direito<option value='0503'>0503 - Universidade de Coimbra - Faculdade de Economia<option value='0504'>0504 - Universidade de Coimbra - Faculdade de Farmácia<option value='0505'>0505 - Universidade de Coimbra - Faculdade de Letras<option value='0506'>0506 - Universidade de Coimbra - Faculdade de Medicina<option value='0507'>0507 - Universidade de Coimbra - Faculdade de Psicologia e de Ciências da Educação<option value='0508'>0508 - Universidade de Coimbra - Faculdade de Ciências do Desporto e Educação Física<option value='0602'>0602 - Universidade de Évora - Escola de Ciências e Tecnologia<option value='0603'>0603 - Universidade de Évora - Escola de Artes<option value='0604'>0604 - Universidade de Évora - Escola de Ciências Sociais<option value='0700'>0700 - Universidade de Lisboa<option value='0701'>0701 - Universidade de Lisboa - Faculdade de Ciências<option value='0702'>0702 - Universidade de Lisboa - Faculdade de Direito<option value='0703'>0703 - Universidade de Lisboa - Faculdade de Farmácia<option value='0704'>0704 - Universidade de Lisboa - Faculdade de Letras<option value='0705'>0705 - Universidade de Lisboa - Faculdade de Medicina<option value='0708'>0708 - Universidade de Lisboa - Instituto de Geografia e Ordenamento do Território<option value='0709'>0709 - Universidade de Lisboa - Instituto de Educação<option value='0710'>0710 - Universidade de Lisboa - Faculdade de Psicologia<option value='0801'>0801 - Universidade Técnica de Lisboa - Faculdade de Medicina Veterinária<option value='0802'>0802 - Universidade Técnica de Lisboa - Faculdade de Arquitectura<option value='0803'>0803 - Universidade Técnica de Lisboa - Instituto Superior de Agronomia<option value='0804'>0804 - Universidade Técnica de Lisboa - Instituto Superior de Ciências Sociais e Políticas<option value='0805'>0805 - Universidade Técnica de Lisboa - Instituto Superior de Economia e Gestão<option value='0806'>0806 - Universidade Técnica de Lisboa - Faculdade de Motricidade Humana<option value='0807'>0807 - Universidade Técnica de Lisboa - Instituto Superior Técnico<option value='0808'>0808 - Universidade Técnica de Lisboa - Instituto Superior Técnico (instalações no Tagus Park)<option value='0901'>0901 - Universidade Nova de Lisboa - Faculdade de Ciências Médicas<option value='0902'>0902 - Universidade Nova de Lisboa - Faculdade de Ciências Sociais e Humanas<option value='0903'>0903 - Universidade Nova de Lisboa - Faculdade de Ciências e Tecnologia<option value='0904'>0904 - Universidade Nova de Lisboa - Faculdade de Economia<option value='0906'>0906 - Universidade Nova de Lisboa - Instituto Superior de Estatística e Gestão de Informação<option value='0911'>0911 - Universidade Nova de Lisboa - Faculdade de Direito<option value='1000'>1000 - Universidade do Minho<option value='1101'>1101 - Universidade do Porto - Faculdade de Ciências da Nutrição e Alimentação<option value='1102'>1102 - Universidade do Porto - Faculdade de Arquitectura<option value='1103'>1103 - Universidade do Porto - Faculdade de Ciências<option value='1104'>1104 - Universidade do Porto - Faculdade de Economia<option value='1105'>1105 - Universidade do Porto - Faculdade de Engenharia<option value='1106'>1106 - Universidade do Porto - Faculdade de Farmácia<option value='1107'>1107 - Universidade do Porto - Faculdade de Letras<option value='1108'>1108 - Universidade do Porto - Faculdade de Medicina<option value='1109'>1109 - Universidade do Porto - Faculdade de Psicologia e de Ciências da Educação<option value='1110'>1110 - Universidade do Porto - Instituto de Ciências Biomédicas Abel Salazar<option value='1111'>1111 - Universidade do Porto - Faculdade de Desporto<option value='1113'>1113 - Universidade do Porto - Faculdade de Medicina Dentária<option value='1114'>1114 - Universidade do Porto - Faculdade de Direito<option value='1201'>1201 - Universidade de Trás-os-Montes e Alto Douro - Escola de Ciências Agrárias e Veterinárias<option value='1202'>1202 - Universidade de Trás-os-Montes e Alto Douro - Escola de Ciências Humanas e Sociais<option value='1203'>1203 - Universidade de Trás-os-Montes e Alto Douro - Escola de Ciências e Tecnologia<option value='1204'>1204 - Universidade de Trás-os-Montes e Alto Douro - Escola de Ciências da Vida e do Ambiente<option value='1205'>1205 - Universidade de Trás-os-Montes e Alto Douro - Escola de Ciências Humanas e Sociais (Chaves)<option value='1300'>1300 - Universidade da Madeira<option value='5302'>5302 - Universidade de Lisboa - 开发者_运维问答Faculdade de Belas-Artes<option value='5402'>5402 - Universidade do Porto - Faculdade de Belas-Artes<option value='6600'>6600 - Universidade de Lisboa - Faculdade de Medicina Dentária<option value='6800'>6800 - ISCTE - Instituto Universitário de Lisboa
        </select>
        <br><br>
    </td>
</tr>
<tr>
    <td align="right" class="tablebuttons">
        <input type="hidden" name="CodR" value="11">
        <input type="submit" name="listagem" value="Últimos Colocados" style="font-size: 10px;">
        <input type="submit" name="listagem" value="Últimos Colocados por Etapa" style="font-size: 10px;">
        <input type="submit" name="listagem" value="Lista de Colocados" style="font-size: 10px;">
        <input type="submit" name="listagem" value="Lista Ordenada de Candidatos" style="font-size: 10px;">
    </td>
</tr>

As you can see, there's a preselected option, but I want to select another option and submit with the value "Lista Ordenada de Candidatos". Is this possible?

Also, in the page that comes after this one, there's another selection list, but in that page I want to select each one of the options and submit, any ideas?


  1. Use Mechanize to fetch the page.
  2. Find the form you want on the page.
  3. Find the <select> somewhere in the form.
  4. Change the value of the <select>.
  5. Submit the form and get the new page.
  6. Repeat as you wish.

# encoding: UTF-8 require 'mechanize'

Mechanize.new.get('http://foo.com/bar') do |page|
  # Find the form you want here, since you didn't show it to us
  form = page.form_with(:action => "blah/blah")
  form.field_with(:name=>"CodEstab").value = "Lista Ordenada de Candidatos"
  next_page = form.submit
  # Find the form on next_page, manipulate it, submit it
end

For more information, see the Mechanize Examples documentation, and the documentation for a Page, Form, SelectList, and MultiSelectList.

As shown in that last link, if you want to select many options in a multi-select, simply set the value of it to an array of strings. If you don't know the values and want to select them all:

# Assuming you are using Ruby 1.8.7 or later
myselect.value = myselect.options.map(&:value)
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号