2012-05-15 15 views

Antwort

4

Nokogiri und Mechanize sind nicht vollständiger Web-Browser und tut Führen Sie JavaScript nicht in einem Browsermodell-DOM aus. Sie möchten etwas wie Watir oder Selenium verwenden, mit denen Sie Ruby verwenden können, um einen aktuellen Webbrowser zu steuern.

+1

Wenn Sie einen echten JavaScript-fähigen Browser automatisieren möchten, aber ohne ein sichtbares Fenster, versuchen Sie einen kopflosen Browser wie (capybara-webkit) [https://github.com/thoughtbot/capybara-webkit] oder (PhantomJS) [http: //phantomjs.org/] (es gibt auch andere). – echristopherson

+1

@echristopherson Danke; das sind [capybara-webkit] (https://github.com/thoughtbot/capybara-webkit) bzw. [PhantomJS] (http://phantomjs.org/) (feste Markup-Links). – Phrogz

0

Ich weiß nichts über Mechanize oder Nokogiri, also kann ich nicht speziell auf sie eingehen. Allerdings ist das Problem, JavaScript nach der Änderung zu bekommen, eines, von dem ich glaube, dass es nur mit mehr JavaScript gelöst werden kann. Um den neu generierten HTML-Code zu erhalten, müssten Sie die .innerHTML-Datei des Dokumentelements abrufen. Dies kann schwierig sein, da Sie js in eine Seite injizieren müssen.

Der einzige Weg, um dies zu erreichen, ist ein FireFox-Plugin zu schreiben. Mit einem Plugin können Sie JavaScript auf einer Seite ausführen, obwohl es nicht Ihre Seite ist. Sorry, ich bin nicht mehr Hilfe, ich hoffe, dass dies hilft, Sie auf den richtigen Weg zu bringen.

Wenn Sie Interesse an Plug-In ist dies ein Ort zu starten: http: //anthonystechblog.wordpress.com/category/internet/firefox/

+0

Anstatt ein eigenes Plugin von Grund auf neu zu erstellen, könnte Greasemonkey es wahrscheinlich tun. – FatalError

2

Zusätzlich zu watir-webdriver und capybara-webkit ist celerity eine gute Option, obwohl es nur jruby ist.

6

Ich denke, eine gute Option, so etwas wie dies mit Nokogiri ist, Watir und PhantomJS:

b = Watir::Browser.new(:phantomjs)

b.goto URL

doc = Nokogiri::HTML(b.html)

Das resultierende doc aus sein wird, wenn nach den Skripten wurden geladen. Und phantomjs ist nett, weil kein Browser geladen werden muss.