Skip to content

Instantly share code, notes, and snippets.

@Niall47
Created April 7, 2024 16:11
Show Gist options
  • Select an option

  • Save Niall47/d98838648b6e08aafbe646184e076975 to your computer and use it in GitHub Desktop.

Select an option

Save Niall47/d98838648b6e08aafbe646184e076975 to your computer and use it in GitHub Desktop.

Revisions

  1. Niall47 created this gist Apr 7, 2024.
    56 changes: 56 additions & 0 deletions pal_scraper.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,56 @@
    # frozen_string_literal: true

    require 'capybara'
    require 'capybara/dsl'
    require 'selenium/webdriver'

    Capybara.register_driver :firefox do |app|
    Capybara::Selenium::Driver.new(app, browser: :firefox)
    end
    Capybara.default_driver = :firefox
    Capybara.javascript_driver = :firefox
    include Capybara::DSL

    visit 'https://palbreed.com/breeding-tree'
    pals = all('.name')
    breeding = {}

    # close the popups
    within_frame('sp_message_iframe_1092512') { click_button 'More Options' }
    within_frame('sp_message_iframe_978329') { click_button 'Save & Exit' }

    begin
    pal_index = 0
    pal_names = pals.map(&:text)
    # For every possible child pal
    pal_names.each do |name|
    # honestly this is so dumb, but the page doesn't show element 113 for some reason so we're skipping it
    pal_index += 1 if pal_index == 112
    puts "Pal: #{name} number #{pal_index}"
    breeding[name] = []
    pal_index += 1

    find(:xpath,
    "/html/body/div[@id='__nuxt']/div/section[@class='breeding-tree']/div[@class='left-panel']/div[@class='top']/div[@class='pals-list']/div[@class='pals']/div[@class='pal'][#{pal_index}]").click

    # iterate through each combo card and load it into the hash under the pal name
    combinations = all('.card')
    combinations.each do |card|
    # split the string into two names
    parents = card.text.scan(/^(.+?)\s\+\s(.+?)$/)
    next if parents[0].nil?

    parent_1 = parents[0][0]
    parent_2 = parents[0][1]
    breeding[name] = breeding[name] << [parent_1, parent_2]
    end
    # Now we go back to the child pal list page thing
    click_button 'Clear'
    end
    rescue StandardError => e
    puts "Dont care #{e}"
    end

    # Save the breeding hash to a json file
    File.write('pal_breeding.json', JSON.pretty_generate(breeding))
    puts breeding