Advertisement
Guest User

Untitled

a guest
Apr 13th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.13 KB | None | 0 0
  1. require 'watir'
  2. require 'nokogiri'
  3. require 'json'
  4. require 'time'
  5. require 'pry'
  6. require_relative 'moldtransaction'
  7.  
  8. class Moldindconbank
  9.  
  10. attr_reader :browser
  11. def initialize
  12. @browser = Watir::Browser.new(:chrome)
  13. end
  14.  
  15. def collect_data
  16. log_in
  17. sleep(2)
  18. parse_accounts
  19. end
  20.  
  21. def log_in
  22. browser.goto("https://wb.micb.md/")
  23. puts "Write your Username: "
  24. browser.text_field(class: "username").set(gets.chomp)
  25. puts "Write your Password: "
  26. browser.text_field(id: "password").set(gets.chomp)
  27. browser.button(class: "wb-button").click
  28. #
  29. end
  30.  
  31. def parse_accounts
  32. accounts = browser.divs(class: %w(contract status-active))
  33. accounts_info = accounts.map do |element|
  34. Watir::Wait.until { element.div(class: "contract-cards").a.present? }
  35. element.div(class: "contract-cards").a.click
  36. go_to_card_info
  37. page = Nokogiri::HTML(browser.div(id: "contract-information").html)
  38. go_to_transaction_info
  39. result = {
  40. name: parse_name(page),
  41. balance: parse_balance(page),
  42. currency: parse_currency(page),
  43. description: parse_nature(page),
  44. transactions: parse_transactions(&:to_hash)
  45. }
  46. browser.li(class: %w(new_cards_accounts-menu-item active)).a.click
  47. result
  48. end
  49. log_out
  50. JSON.pretty_generate( accounts: accounts_info )
  51. end
  52.  
  53. def go_to_card_info
  54. browser.ul(class: %w(ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all)).lis[1].click
  55. end
  56.  
  57. def parse_name(page)
  58. page.css('tr')[-3].css('td')[1].text
  59. end
  60.  
  61. def parse_balance(page)
  62. page.css('tr')[-1].css('td')[1].css('span')[0].text
  63. end
  64.  
  65. def parse_currency(page)
  66. page.css('tr')[-1].css('td')[1].css('span')[1].text
  67. end
  68.  
  69. def parse_nature(page)
  70. page.css('tr')[3].css('td')[1].text.gsub("2. De baza - ", "")
  71. end
  72.  
  73. def go_to_transaction_info
  74. browser.link(href: "#contract-history").click
  75. browser.text_field(class: %w(filter-date from maxDateToday hasDatepicker)).click
  76. Watir::Wait.until { browser.link(class: %w(ui-datepicker-prev ui-corner-all)).present? }
  77. browser.link(class: %w(ui-datepicker-prev ui-corner-all)).click
  78. sleep(2)
  79. Watir::Wait.until { browser.link(class: "ui-state-default").present? }
  80. browser.link(class: "ui-state-default").click
  81. end
  82.  
  83. def parse_transactions
  84. Watir::Wait.until { browser.div(class: "operations").li.present? }
  85. transaction_list = browser.div(class: "operations").lis
  86. list = transaction_list.map do |li|
  87. Watir::Wait.until { li.link.present? }
  88. li.link.click
  89. transaction = Nokogiri::HTML.parse(browser.div(class: "operation-details-body").html)
  90. describe_transaction = Nokogiri::HTML.parse(browser.div(class: "operation-details-header").html)
  91. browser.send_keys :escape
  92. Moldtransaction.new(
  93. parse_data(transaction),
  94. parse_description(describe_transaction),
  95. parse_amount(transaction)
  96. ).to_hash
  97. end
  98. end
  99.  
  100. def parse_data(transaction)
  101. transaction.css('.operation-details-body').css('.details-section')[0].css('.value')[0].text
  102. end
  103.  
  104. def parse_description(describe_transaction)
  105. describe_transaction.css('.operation-details-header').text.gsub(" ", "")
  106. end
  107.  
  108. def parse_amount(transaction)
  109. transaction.css('.details-section.amounts').css('.value')[0].text
  110. end
  111.  
  112. def log_out
  113. browser.span(class: "logout-link-wrapper").click
  114. end
  115.  
  116. end
  117.  
  118. class Moldtransaction
  119.  
  120. attr_reader :date, :description, :amount
  121. def initialize(date, description, amount)
  122. @date = Time.parse(date)
  123. @description = description
  124. @amount = amount
  125. end
  126.  
  127. def to_hash
  128. {
  129. date: @date,
  130. description: @description,
  131. amount: @amount
  132. }
  133. end
  134.  
  135. end
  136.  
  137. require_relative './spec_helper'
  138. require_relative '../moldindconbank.rb'
  139.  
  140. RSpec.describe Moldindconbank do
  141. let(:file) { File.open("./operations.html","r") { |f| f.read } }
  142. let(:page) { Nokogiri::HTML.fragment(file).css("#contract-information") }
  143.  
  144. let(:fileNew) { File.open("./transactions.html","r") { |f| f.read } }
  145. let(:body) { Nokogiri::HTML.fragment(fileNew).css(".operation-details-body") }
  146. let(:header) { Nokogiri::HTML.fragment(fileNew).css(".operation-details-header") }
  147.  
  148. before do
  149. expect(Watir::Browser).to receive(:new).and_return("OK")
  150. end
  151.  
  152. context "Parsing accounts information" do
  153. it "parse_name" do
  154. expect(subject.send(:parse_name, page)).to eq("Iana Connicov")
  155. end
  156.  
  157. it "parse_nature" do
  158. expect(subject.send(:parse_nature, page)).to eq("MasterCard Standard Contactless")
  159. end
  160.  
  161. it "parse_currency" do
  162. expect(subject.send(:parse_currency, page)).to eq("USD")
  163. end
  164.  
  165. it "parse_balance" do
  166. expect(subject.send(:parse_balance, page)).to eq("0,51")
  167. end
  168. end
  169.  
  170. context "Parsing( transactions information" do
  171. it "parse_data" do
  172. expect(subject.send(:parse_data, body)).to eq("13 aprilie 2018 15:38")
  173. end
  174.  
  175. it "parse_description" do
  176. expect(subject.send(:parse_description, header)).to eq("Transfer între carduri MasterCard 535113******9700")
  177. end
  178.  
  179. it "parse_amount" do
  180. expect(subject.send(:parse_amount, body)).to eq("500,00 USD")
  181. end
  182. end
  183.  
  184. end
  185.  
  186. if __FILE__ == $0
  187. webbanking = Moldindconbank.new
  188. puts webbanking.collect_data
  189. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement