2012-07-16 3 views
2

J'essaie d'obtenir un champ caché avec mécaniser en ruby ​​et en essayant de cliquer dessus.Ruby :: Comment rechercher des éléments cachés avec mechanize

agent = Mechanize.new 
agent.get('http://www.example.com/') 
agent.page.link_with(:text => "More Links...") 

Mais cela me donne:

=> nil 

En fait, je veux cliquer dessus:

agent.page.link_with(:text => "More Links...").click 

Mais ceci est une erreur:

undefined method `click' for nil:NilClass

Et ici est mon code HTML:

Répondre

0

Cela devrait probablement trouver le lien si c'est vraiment sur la page, mais le plus gros problème est que cliquant sur un lien avec un href de 'javascript :; ne fait pas ce que tu penses faire. C'est parce que mechanize n'est pas un navigateur complet avec un interpréteur javascript, etc.

1

Actuellement, Mechanize ne supporte pas javascript. Je suggère que vous essayez et figure sur ce que le serveur s'attend à ce que l'agent utilisateur à envoyer, puis répliquer cela avec mécaniser. Vous pouvez utiliser un outil comme HTTPFox qui est un addon Firefox qui surveille le trafic entre un serveur web et votre navigateur. Une fois que vous avez cela, vous pouvez facilement le reproduire avec mécaniser. Quelque chose comme ça;

agent = Mechanize.new 

# Doesn't work 

# home_page = agent.get('http://requestb.in/') 
# agent.click(home_page.link_with(:text => "Create a RequestBin")) 
# => undefined method `[]' for nil:NilClass (NoMethodError) 

# Works 

# The javascript code just makes a POST request with one parameter 
request_bin = agent.post("http://requestb.in/api/v1/bins", { "private" => "false" }) 
puts request_bin.body