/ / Jak uzyskać dostęp do elementów HTML renderowanych w JavaScript przy użyciu XPath? - ruby, xpath, nokogiri

Jak uzyskać dostęp do elementów HTML renderowanych w JavaScript przy użyciu XPath? - ruby, xpath, nokogiri

Jak uzyskać <td> z określoną nazwą klasy przy użyciu XPath i Nokogiri? Tabele są zagnieżdżone, a niektóre z nich nie mają identyfikatorów ani klas, więc nie mogę zagnieżdżać takich rzeczy:

//table/tbody/tr/td

Oto, co mam do tej pory:

doc = Nokogiri::HTML(open("http://www.goalzz.com/default.aspx?c=8358"))
doc.xpath("//td[@class="m_g"]").each do |node|
pp node.to_s
end

Jakieś pomysły? Jest kilka <td>z tą nazwą klasy i chcę je wszystkie zdobyć.

Odpowiedzi:

1 dla odpowiedzi № 1

Korzystanie z gem „capybara-webkit” jest realnym sposobem na manipulowanie tą stroną w pełnym widoku javascript.

Oto przykład, jak mógłby wyglądać skrypt capybara-webkit.

#!/usr/bin/env ruby
require "rubygems"
require "pp"
require "bundler/setup"
require "capybara"
require "capybara/dsl"
require "capybara-webkit"

Capybara.run_server = false
Capybara.current_driver = :webkit
Capybara.app_host = "http://www.goalzz.com/"

module Test
class Goalzz
include Capybara::DSL

def get_results
visit("/default.aspx?c=8358")
all(:xpath, "//td[@class="m_g"]").each { |node| pp node.to_s }

end
end
end

spider = Test::Goalzz.new
spider.get_results

To, co jest wymagane do znalezienia przykładowej ścieżki xpath w tym przypadku (ze względu na dynamiczne tworzenie strony), to w pełni funkcjonalny silnik JavaScriptu.


1 dla odpowiedzi nr 2

Czy są na nich atrybuty klasy tds dokładnie „m_g”, czy też mają więcej niż jedną klasę na jednym td? Jeśli jest to ten ostatni, ten XPath może działać:

//td[contains(@class, "m_g")]