J'essaie d'écran gratter une page Web (en utilisant Mechanize) qui affiche les enregistrements dans une grille page sage. Je suis capable de lire les valeurs affichées dans la première page, mais je dois maintenant aller à la page suivante pour lire les valeurs appropriées.Scrape page Web qui affiche des pages de données sages en utilisant Mechanize
<tr>
<td><span>1</span></td>
<td><a href="javascript:__doPostBack('gvw_offices','Page$2')">2</a></td>
<td><a href="javascript:__doPostBack('gvw_offices','Page$3')" >3</a></td>
<td><a href="javascript:__doPostBack('gvw_offices','Page$4')" >4</a></td>
<td><a href="javascript:__doPostBack('gvw_offices','Page$5')" >5</a></td>
<td><a href="javascript:__doPostBack('gvw_offices','Page$6')">6</a></td>
<td><a href="javascript:__doPostBack('gvw_offices','Page$7')" >7</a></td>
<td><a href="javascript:__doPostBack('gvw_offices','Page$8')">8</a></td>
<td><a href="javascript:__doPostBack('gvw_offices','Page$9')" >9</a></td>
<td><a href="javascript:__doPostBack('gvw_offices','Page$10')" >10</a></td>
<td><a href="javascript:__doPostBack('gvw_offices','Page$11')">...</a></td>
</tr>
Je suis en mesure de passer à travers tous les liens, mais quand j'essaie ceci: -
links = (row/"a")
links.each do |link|
agent.click link.attributes['href'] # This fails
agent.click link # This also fails
end
La raison est que agent.click attend l'URL comme argument.
Existe-t-il un moyen de lire toutes les valeurs lorsqu'elles sont affichées sur la page? Sinon, comment pouvons-nous avoir une telle action de clic lorsque le href est une publication et non une URL ??
C'est une bonne solution! – Geo
Problème est que cette page utilise ASP.Grid pour afficher les enregistrements de la page sage, par conséquent le lien pour chaque page non est un retour de publication et n'a pas une URL directe. Voulez-vous dire que si nous ajoutons un nom de grille et un numéro de page dans l'URL, nous pouvons provoquer cette publication (bien que cela n'ait pas fonctionné quand je l'ai essayé)? – MOZILLA
Je ne suis pas familier avec ASP.net mais un post retour est essentiellement une requête POST à la page actuelle, n'est ce pas? donc vous pouvez essayer quelque chose comme agent.post current_url, {"page_number" => page_number} –