Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'watir'
- require 'nokogiri'
- require 'json'
- require 'time'
- require 'pry'
- require_relative 'moldtransaction'
- class Moldindconbank
- attr_reader :browser
- def initialize
- @browser = Watir::Browser.new(:chrome)
- end
- def collect_data
- log_in
- sleep(2)
- parse_accounts
- end
- def log_in
- browser.goto("https://wb.micb.md/")
- puts "Write your Username: "
- browser.text_field(class: "username").set(gets.chomp)
- puts "Write your Password: "
- browser.text_field(id: "password").set(gets.chomp)
- browser.button(class: "wb-button").click
- #
- end
- def parse_accounts
- accounts = browser.divs(class: %w(contract status-active))
- accounts_info = accounts.map do |element|
- Watir::Wait.until { element.div(class: "contract-cards").a.present? }
- element.div(class: "contract-cards").a.click
- go_to_card_info
- page = Nokogiri::HTML(browser.div(id: "contract-information").html)
- go_to_transaction_info
- result = {
- name: parse_name(page),
- balance: parse_balance(page),
- currency: parse_currency(page),
- description: parse_nature(page),
- transactions: parse_transactions(&:to_hash)
- }
- browser.li(class: %w(new_cards_accounts-menu-item active)).a.click
- result
- end
- log_out
- JSON.pretty_generate( accounts: accounts_info )
- end
- def go_to_card_info
- browser.ul(class: %w(ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all)).lis[1].click
- end
- def parse_name(page)
- page.css('tr')[-3].css('td')[1].text
- end
- def parse_balance(page)
- page.css('tr')[-1].css('td')[1].css('span')[0].text
- end
- def parse_currency(page)
- page.css('tr')[-1].css('td')[1].css('span')[1].text
- end
- def parse_nature(page)
- page.css('tr')[3].css('td')[1].text.gsub("2. De baza - ", "")
- end
- def go_to_transaction_info
- browser.link(href: "#contract-history").click
- browser.text_field(class: %w(filter-date from maxDateToday hasDatepicker)).click
- Watir::Wait.until { browser.link(class: %w(ui-datepicker-prev ui-corner-all)).present? }
- browser.link(class: %w(ui-datepicker-prev ui-corner-all)).click
- sleep(2)
- Watir::Wait.until { browser.link(class: "ui-state-default").present? }
- browser.link(class: "ui-state-default").click
- end
- def parse_transactions
- Watir::Wait.until { browser.div(class: "operations").li.present? }
- transaction_list = browser.div(class: "operations").lis
- list = transaction_list.map do |li|
- Watir::Wait.until { li.link.present? }
- li.link.click
- transaction = Nokogiri::HTML.parse(browser.div(class: "operation-details-body").html)
- describe_transaction = Nokogiri::HTML.parse(browser.div(class: "operation-details-header").html)
- browser.send_keys :escape
- Moldtransaction.new(
- parse_data(transaction),
- parse_description(describe_transaction),
- parse_amount(transaction)
- ).to_hash
- end
- end
- def parse_data(transaction)
- transaction.css('.operation-details-body').css('.details-section')[0].css('.value')[0].text
- end
- def parse_description(describe_transaction)
- describe_transaction.css('.operation-details-header').text.gsub(" ", "")
- end
- def parse_amount(transaction)
- transaction.css('.details-section.amounts').css('.value')[0].text
- end
- def log_out
- browser.span(class: "logout-link-wrapper").click
- end
- end
- class Moldtransaction
- attr_reader :date, :description, :amount
- def initialize(date, description, amount)
- @date = Time.parse(date)
- @description = description
- @amount = amount
- end
- def to_hash
- {
- date: @date,
- description: @description,
- amount: @amount
- }
- end
- end
- require_relative './spec_helper'
- require_relative '../moldindconbank.rb'
- RSpec.describe Moldindconbank do
- let(:file) { File.open("./operations.html","r") { |f| f.read } }
- let(:page) { Nokogiri::HTML.fragment(file).css("#contract-information") }
- let(:fileNew) { File.open("./transactions.html","r") { |f| f.read } }
- let(:body) { Nokogiri::HTML.fragment(fileNew).css(".operation-details-body") }
- let(:header) { Nokogiri::HTML.fragment(fileNew).css(".operation-details-header") }
- before do
- expect(Watir::Browser).to receive(:new).and_return("OK")
- end
- context "Parsing accounts information" do
- it "parse_name" do
- expect(subject.send(:parse_name, page)).to eq("Iana Connicov")
- end
- it "parse_nature" do
- expect(subject.send(:parse_nature, page)).to eq("MasterCard Standard Contactless")
- end
- it "parse_currency" do
- expect(subject.send(:parse_currency, page)).to eq("USD")
- end
- it "parse_balance" do
- expect(subject.send(:parse_balance, page)).to eq("0,51")
- end
- end
- context "Parsing( transactions information" do
- it "parse_data" do
- expect(subject.send(:parse_data, body)).to eq("13 aprilie 2018 15:38")
- end
- it "parse_description" do
- expect(subject.send(:parse_description, header)).to eq("Transfer între carduri MasterCard 535113******9700")
- end
- it "parse_amount" do
- expect(subject.send(:parse_amount, body)).to eq("500,00 USD")
- end
- end
- end
- if __FILE__ == $0
- webbanking = Moldindconbank.new
- puts webbanking.collect_data
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement