Я пытаюсь отсканировать в интернете продукты "Fre sh & Chilled" Waitrose & Partners , используя Ruby и Nokogiri.
Чтобы загрузить больше продуктов Мне нужно нажать «Загрузить еще ...», чтобы динамически загружать больше продуктов без изменения URL-адреса или перенаправления на новую страницу.
Как мне «нажать» на «Загрузить еще» кнопка, чтобы загрузить больше продуктов?

Я думаю, что это динамичный c веб-сайт, поскольку элементы загружаются динамически после нажатия «Загрузить еще .. . "и URL не изменяется вообще (поэтому пагинация не видна)
Вот код, который я пробовал до сих пор, но я застрял в загрузке большего количества элементов. Я предполагаю, что DOM загружается сам по себе, но вы не можете фактически нажать кнопку, потому что она представляет собой вызов javascript метода, который загрузит остальные элементы.
require "csv"
require "json"
require "nokogiri"
require "open-uri"
require "pry"
def scrape_category(category)
CSV.open("out/waitrose_items_#{category}.csv", "w") do |csv|
headers = [:id, :name, :category, :price_per_unit, :price_per_quantity, :image_url, :available, :url]
csv << headers
url = "https://www.waitrose.com/ecom/shop/browse/groceries/#{category}"
html = open(url)
doc = Nokogiri::HTML(html)
load_more = doc.css(".loadMoreWrapper___UneG1").first
pages = 0
while load_more != nil
puts pages.to_s
load_more.content # Here's where I don't know how to click the button to load more items
products = doc.css(".podHeader___3yaub")
puts "products = " + products.length.to_s
pages = pages + 1
load_more = doc.css(".loadMoreWrapper___UneG1").first
end
(0..products.length-1).each do |i|
puts "url = " + products[i].text
end
load_more = doc.css(".loadMoreWrapper___UneG1")[0]
# here goes the processing of each single item to put in csv file
end
end
def scrape_waitrose
categories = [
"fresh_and_chilled",
]
threads = categories.map do |category|
Thread.new { scrape_category(category) }
end
threads.each(&:join)
end
#binding.pry