rakuten_securities_scraper 0.1.3 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d5f91840ce280a6f2219a4b556fde59c2feb73aea9c0d78c2636c67f76090c09
4
- data.tar.gz: b779046723e8a50f388892bc5a662b249591e20688d3f0ecb8c2f01de9b6f02b
3
+ metadata.gz: 7a61a30f6ff13a24491e442e47b7d3d2e413aca237d6da3d50be7b585da487b3
4
+ data.tar.gz: ccdb20343aa853523d011a4ff22bbb7e5e64c1ca4c3a46aa7261df9ed57a1c2a
5
5
  SHA512:
6
- metadata.gz: d455f3b999e60d33c1205c997eb6032679f21fc407a316d57c20478080eb0d494336f2226d620bd3a6b1bdb4cce2b2f1b8554f39b353ad7a2a971c4b6592ee37
7
- data.tar.gz: a28fba136216b41220913abe42febaff9cc17f4250257589d285e9b246affb56abe2842209a4f4dfe5adc9063f3eeb1cbce1037df2efd352110d4c0bf806dc32
6
+ metadata.gz: b4e23de3f5a09272fa8d3953a6dc0431f60f752752627b3dedc992ce8881b8d9b2c1bd595be652df9e710a94080024660f778bcb268f5448db7158afa25f4dfe
7
+ data.tar.gz: e85966fa71566fdec57c4b43a2f6b0e4b59c8408866f5dfa0e8d914ae07a7b5792b4b813ec0eefbc0ab6db36a4ac9441b3bf38b2be864a1508656cc3c59cb5ec
data/.gitignore CHANGED
@@ -27,3 +27,4 @@
27
27
  /cloud_sql_proxy
28
28
  # rspec failure tracking
29
29
  .rspec_status
30
+ .env
@@ -1,13 +1,12 @@
1
1
  AllCops:
2
2
  EnabledByDefault: true
3
3
 
4
- ##################### Style ##################################
5
-
6
- # redirect_to xxx and return のイディオムを維持したい
7
4
  Style/AndOr:
8
5
  Enabled: false
9
6
 
10
- # 日本語のコメントを許可する
7
+ Style/ClassAndModuleChildren:
8
+ Enabled: false
9
+
11
10
  Style/AsciiComments:
12
11
  Enabled: false
13
12
 
@@ -36,19 +35,15 @@ Style/CollectionMethods:
36
35
  inject: "inject"
37
36
  reduce: "inject"
38
37
 
39
- # ドキュメントの無い public class を許可する
40
38
  Style/Documentation:
41
39
  Enabled: false
42
40
 
43
- # !! のイディオムは積極的に使う
44
41
  Style/DoubleNegation:
45
42
  Enabled: false
46
43
 
47
- # MethodDefParentheses:
48
- # EnforcedStyle: require_no_parentheses
49
-
50
- # メソッドチェーンの改行は末尾に . を入れる
51
- # REPL に貼り付けた際の暴発を防ぐため
44
+ Lint/ConstantResolution:
45
+ Enabled: false
46
+
52
47
  Layout/DotPosition:
53
48
  EnforcedStyle: trailing
54
49
 
@@ -56,122 +51,87 @@ Layout/DotPosition:
56
51
  Layout/EmptyLineAfterGuardClause:
57
52
  Enabled: false
58
53
 
59
- # 明示的に else で nil を返すのは分かりやすいので許可する
60
54
  Style/EmptyElse:
61
55
  EnforcedStyle: empty
62
56
 
63
- # 桁揃えが綺麗にならないことが多いので migration は除外
64
57
  Layout/ExtraSpacing:
65
58
  Exclude:
66
59
  - "db/migrate/*.rb"
60
+ - "*.gemspec"
67
61
 
68
- # いずれかに揃えるのならば `sprintf` や `format` より String#% が好きです
69
62
  Style/FormatString:
70
63
  EnforcedStyle: percent
71
64
 
72
- # if 文の中に 3 行程度のブロックを書くぐらいは許容した方が現実的
65
+ Style/MissingElse:
66
+ Enabled: false
67
+
68
+ Style/StringHashKeys:
69
+ Exclude:
70
+ - "spec/queries/*.rb"
71
+ - "*.gemspec"
72
+
73
73
  Style/GuardClause:
74
74
  MinBodyLength: 5
75
75
 
76
- # rake タスクの順序の hash は rocket を許可する
77
76
  Style/HashSyntax:
78
77
  EnforcedStyle: ruby19
79
78
  Exclude:
80
79
  - "**/*.rake"
81
80
  - "Rakefile"
82
81
 
83
- # 条件式の方を意識させたい場合には後置の if/unless を使わない方が分かりやすい
84
82
  Style/IfUnlessModifier:
85
83
  Enabled: false
86
84
 
87
- # private/protected は一段深くインデントする
88
85
  Style/PreferredHashMethods:
89
86
  EnforcedStyle: short
90
87
 
91
- # scope 等は複数行でも lambda ではなく ->{} で揃えた方が見た目が綺麗
92
88
  Style/Lambda:
93
89
  Enabled: false
94
90
 
95
- # 1_000_000 と区切り文字が 2 個以上必要になる場合のみ _ 区切りを必須にする
96
91
  Style/NumericLiterals:
97
92
  MinDigits: 7
98
93
 
99
- # 正規表現にマッチさせた時の特殊変数の置き換えは Regex.last_match ではなく
100
- # 名前付きキャプチャを使って参照したいので auto-correct しない
101
94
  Style/PerlBackrefs:
102
95
  AutoCorrect: false
103
96
 
104
- # 特に model 内において、ローカル変数とメソッド呼び出しの区別をつけた方が分かりやすい場合が多い
105
97
  Style/RedundantSelf:
106
98
  Enabled: false
107
99
 
108
100
  Style/FrozenStringLiteralComment:
109
101
  Enabled: false
110
102
 
111
- # 受け取り側で multiple assignment しろというのを明示
112
103
  Style/RedundantReturn:
113
104
  AllowMultipleReturnValues: true
114
105
 
115
- # spec 内は見た目が綺麗になるので許可
116
106
  Style/Semicolon:
117
107
  Exclude:
118
108
  - "spec/**/*"
119
109
 
120
- # fail と使い分ける必要ナシ
121
110
  Style/SignalException:
122
111
  EnforcedStyle: only_raise
123
112
 
124
113
  Style/MethodDefParentheses:
125
114
  Enabled: false
126
115
 
127
- # `||` も align に使うことがあるので追加する
128
- # Style/SpaceAroundOperators:
129
- # MultiSpaceAllowedForOperators:
130
- # - "="
131
- # - "=>"
132
- # - "||"
133
-
134
- # * 式展開したい場合に書き換えるのが面倒
135
- # * 文章ではダブルクォートよりもシングルクォートの方が頻出する
136
- # ことから EnforcedStyle: double_quotes 推奨
137
116
  Style/StringLiterals:
138
117
  EnforcedStyle: double_quotes
139
118
 
140
- # auto-correct 時に Style/StringLiterals とカニバって無限ループになる (v0.28.0)
141
119
  Style/StringLiteralsInInterpolation:
142
120
  Enabled: false
143
121
 
144
- # いくらなんでも inject { |a, e| } は短すぎるので分かりやすい名前をつけたい
145
122
  Style/SingleLineBlockParams:
146
123
  Enabled: false
147
124
 
148
- # * migrate
149
- # * jbuilder
150
- # * model の association
151
- # * controller の callback
152
- # 辺りの桁揃えで引っかかるので全体的にチェックしない
153
- # Style/SingleSpaceBeforeFirstArg:
154
- # Enabled: false
155
-
156
-
157
- ##################### Lint ##################################
158
-
159
- # * 同名のメソッドがある場合にローカル変数に `_` を付ける
160
- # * 一時変数として `_` を付ける
161
- # というテクニックは頻出する
162
125
  Lint/UnderscorePrefixedVariableName:
163
126
  Enabled: false
164
127
 
165
- # 子クラスで実装させるつもりのメソッドで引っかかるので
166
128
  Lint/UnusedMethodArgument:
167
129
  Enabled: false
168
130
 
169
- ##################### Metrics ##################################
170
131
 
171
132
  Metrics/AbcSize:
172
133
  Enabled: false
173
134
 
174
- # 6 は強すぎるので緩める
175
135
  Metrics/CyclomaticComplexity:
176
136
  Max: 10
177
137
 
@@ -223,5 +183,15 @@ Style/MutableConstant:
223
183
  Enabled: false
224
184
  Style/Copyright:
225
185
  Enabled: false
186
+ Style/MultilineTernaryOperator:
187
+ Enabled: false
226
188
  Layout/MultilineAssignmentLayout:
189
+ Enabled: false
190
+ Style/Send:
191
+ Enabled: false
192
+ Style/RedundantFileExtensionInRequire:
193
+ Enabled: false
194
+ Style/ClassMethodsDefinitions:
195
+ Enabled: false
196
+ Style/GlobalStdStream:
227
197
  Enabled: false
@@ -0,0 +1 @@
1
+ 3.0.0
data/Gemfile CHANGED
@@ -3,8 +3,9 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in rakuten_securities.gemspec
4
4
  gemspec
5
5
 
6
- gem "rake", "~> 12.0"
7
- gem "rspec", "~> 3.0"
8
- gem "rubocop", "0.82.0"
9
- gem "rubocop-performance", "1.5.2"
10
- gem "selenium-webdriver", "3.142.7"
6
+ gem "dotenv", "2.7.6"
7
+ gem "rake", "13.0.3"
8
+ gem "rspec", "3.10.0"
9
+ gem "rubocop", "1.7.0"
10
+ gem "rubocop-performance", "1.9.1"
11
+ gem "selenium-webdriver", "3.142.7"
@@ -1,45 +1,51 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rakuten_securities_scraper (0.1.2)
4
+ rakuten_securities_scraper (0.1.7)
5
+ selenium-webdriver (~> 3.142.7)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
9
- ast (2.4.0)
10
+ ast (2.4.2)
10
11
  childprocess (3.0.0)
11
- diff-lcs (1.3)
12
- jaro_winkler (1.5.4)
13
- parallel (1.19.1)
14
- parser (2.7.1.2)
15
- ast (~> 2.4.0)
12
+ diff-lcs (1.4.4)
13
+ dotenv (2.7.6)
14
+ parallel (1.20.1)
15
+ parser (3.0.0.0)
16
+ ast (~> 2.4.1)
16
17
  rainbow (3.0.0)
17
- rake (12.3.3)
18
+ rake (13.0.3)
19
+ regexp_parser (2.0.3)
18
20
  rexml (3.2.4)
19
- rspec (3.9.0)
20
- rspec-core (~> 3.9.0)
21
- rspec-expectations (~> 3.9.0)
22
- rspec-mocks (~> 3.9.0)
23
- rspec-core (3.9.2)
24
- rspec-support (~> 3.9.3)
25
- rspec-expectations (3.9.2)
21
+ rspec (3.10.0)
22
+ rspec-core (~> 3.10.0)
23
+ rspec-expectations (~> 3.10.0)
24
+ rspec-mocks (~> 3.10.0)
25
+ rspec-core (3.10.1)
26
+ rspec-support (~> 3.10.0)
27
+ rspec-expectations (3.10.1)
26
28
  diff-lcs (>= 1.2.0, < 2.0)
27
- rspec-support (~> 3.9.0)
28
- rspec-mocks (3.9.1)
29
+ rspec-support (~> 3.10.0)
30
+ rspec-mocks (3.10.1)
29
31
  diff-lcs (>= 1.2.0, < 2.0)
30
- rspec-support (~> 3.9.0)
31
- rspec-support (3.9.3)
32
- rubocop (0.82.0)
33
- jaro_winkler (~> 1.5.1)
32
+ rspec-support (~> 3.10.0)
33
+ rspec-support (3.10.1)
34
+ rubocop (1.7.0)
34
35
  parallel (~> 1.10)
35
- parser (>= 2.7.0.1)
36
+ parser (>= 2.7.1.5)
36
37
  rainbow (>= 2.2.2, < 4.0)
38
+ regexp_parser (>= 1.8, < 3.0)
37
39
  rexml
40
+ rubocop-ast (>= 1.2.0, < 2.0)
38
41
  ruby-progressbar (~> 1.7)
39
42
  unicode-display_width (>= 1.4.0, < 2.0)
40
- rubocop-performance (1.5.2)
41
- rubocop (>= 0.71.0)
42
- ruby-progressbar (1.10.1)
43
+ rubocop-ast (1.4.1)
44
+ parser (>= 2.7.1.5)
45
+ rubocop-performance (1.9.1)
46
+ rubocop (>= 0.90.0, < 2.0)
47
+ rubocop-ast (>= 0.4.0)
48
+ ruby-progressbar (1.11.0)
43
49
  rubyzip (2.3.0)
44
50
  selenium-webdriver (3.142.7)
45
51
  childprocess (>= 0.5, < 4.0)
@@ -50,12 +56,14 @@ PLATFORMS
50
56
  ruby
51
57
 
52
58
  DEPENDENCIES
53
- rake (~> 12.0)
59
+ bundler (~> 2.0)
60
+ dotenv (= 2.7.6)
61
+ rake (= 13.0.3)
54
62
  rakuten_securities_scraper!
55
- rspec (~> 3.0)
56
- rubocop (= 0.82.0)
57
- rubocop-performance (= 1.5.2)
63
+ rspec (= 3.10.0)
64
+ rubocop (= 1.7.0)
65
+ rubocop-performance (= 1.9.1)
58
66
  selenium-webdriver (= 3.142.7)
59
67
 
60
68
  BUNDLED WITH
61
- 2.1.4
69
+ 2.2.4
data/README.md CHANGED
@@ -63,13 +63,18 @@ Or install it yourself as:
63
63
  ## Get Today's Executed Order
64
64
  puts data.todays_order
65
65
 
66
+ ## Add favorite list
67
+ page_num : Integer 1..10
68
+ codes : Array ["4755", "4875",,,]
69
+ puts data.favorite page_num, codes
70
+
66
71
  ```
67
72
 
68
73
  ## Development
69
74
 
70
75
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
71
76
 
72
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
77
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org/gems/rakuten_securities_scraper).
73
78
 
74
79
  ## Contributing
75
80
 
@@ -1,8 +1,10 @@
1
1
  require "rakuten_securities_scraper/version"
2
2
  require "selenium-webdriver"
3
+ require "dotenv/load"
3
4
 
4
5
  module RakutenSecuritiesScraper
5
6
  class Error < StandardError; end
7
+
6
8
  class RakutenScraper
7
9
  def initialize login_id, login_pw
8
10
  @login = {
@@ -11,7 +13,99 @@ module RakutenSecuritiesScraper
11
13
  }
12
14
  end
13
15
 
14
- def todays_transaction
16
+ def login
17
+ driver = get_selenium_driver(:chrome)
18
+ url = "https://www.rakuten-sec.co.jp/ITS/V_ACT_Login.html"
19
+ driver.get url
20
+ driver.find_element(id: "form-login-id").send_keys @login[:login_id]
21
+ driver.find_element(id: "form-login-pass").send_keys @login[:login_pw]
22
+ driver.find_element(id: "login-btn").click
23
+ driver
24
+ end
25
+
26
+ def favorite num, codes
27
+ driver = login
28
+ sleep 2
29
+ driver.action.move_to(driver.find_element(id: "gmenu_domestic_stock")).perform
30
+ sleep 2
31
+ driver.find_element(id: "gmenu_domestic_stock").click
32
+ sleep 2
33
+ driver.find_element(link_text: "お気に入り銘柄").click
34
+ sleep 2
35
+ driver.find_element(link_text: num).click
36
+ sleep 2
37
+ driver.find_element(name: "editAnchor").click
38
+ sleep 2
39
+ codes.each do |code|
40
+ driver.find_element(name: "addAnchor").click
41
+ sleep 1
42
+ driver.switch_to.frame driver.find_element(:id, "TB_iframeContent")
43
+ result = click_favorite driver, code.to_s
44
+ sleep 1
45
+ puts "hey" if result == "already exist"
46
+ end
47
+ driver.find_element(id: "prc_save_button1").click
48
+ { status: "success" }
49
+ end
50
+
51
+ def delete_favorite page_num
52
+ driver = login
53
+ sleep 2
54
+ driver.action.move_to(driver.find_element(id: "gmenu_domestic_stock")).perform
55
+ sleep 2
56
+ driver.find_element(id: "gmenu_domestic_stock").click
57
+ sleep 2
58
+ driver.find_element(link_text: "お気に入り銘柄").click
59
+ sleep 2
60
+ driver.find_element(link_text: page_num).click
61
+ sleep 2
62
+ driver.find_element(name: "editAnchor").click
63
+ sleep 2
64
+ table = driver.find_element(class_name: "tbl-data-01")
65
+ rows = table.find_elements(xpath: "//tr")
66
+ last_row = rows.size - 2
67
+ rows[2..last_row].each do |row|
68
+ driver.find_element(id: "line_delete_button_1").click
69
+ driver.switch_to.alert.accept
70
+ sleep 1
71
+ end
72
+ driver.find_element(id: "prc_save_button1").click
73
+ { status: "success" }
74
+ end
75
+
76
+ def click_favorite driver, code
77
+ sleep 2
78
+ driver.find_element(name: "dscrCdNm").clear
79
+ driver.find_element(name: "dscrCdNm").send_keys code
80
+ driver.find_element(name: "dscrCdNm").send_keys(:enter)
81
+ sleep 2
82
+ rows = driver.find_elements(xpath: "//tr")
83
+ value = ""
84
+ num = 0
85
+ rows[3..rows.size - 1].each_with_index do |f, i|
86
+ cells = f.find_elements(:css, "td").map { |a| a.text.strip.gsub(",", "") }
87
+ value = i if cells[1] == code and cells[3] == "東証"
88
+ num += 1
89
+ end
90
+ while value == ""
91
+ driver.find_element(xpath: "//*[@id='str-main-inner']/table/tbody/tr/td/table/tbody/tr/td/form/ul/li[2]/a").click
92
+ rows = driver.find_elements(xpath: "//tr")
93
+ rows[3..rows.size - 1].each_with_index do |f, i|
94
+ cells = f.find_elements(:css, "td").map { |a| a.text.strip.gsub(",", "") }
95
+ value = i + num - 1 if cells[1] == code and cells[3] == "東証"
96
+ end
97
+ end
98
+ driver.find_element(xpath: "//*[@id='#{value}']").click
99
+ sleep 2
100
+ driver.find_element(xpath: "//*[@id='str-main-inner']/table/tbody/tr/td/table/tbody/tr/td/form/div[3]/ul/li/a/img").click
101
+ begin
102
+ return "already exist" if driver.find_element(xpath: "//*[@id='err_msg']").text.include? "すでに登録済みの銘柄が含まれています。"
103
+ rescue
104
+ end
105
+ driver
106
+ end
107
+
108
+ def todays_order
15
109
  driver = get_selenium_driver(:chrome)
16
110
  wait = Selenium::WebDriver::Wait.new(timeout: 100)
17
111
  url = "https://www.rakuten-sec.co.jp/ITS/V_ACT_Login.html"
@@ -35,7 +129,7 @@ module RakutenSecuritiesScraper
35
129
  sleep 2
36
130
  tables = driver.find_elements(xpath: "//tr")
37
131
  page_num = driver.find_element(class_name: "mtext").text.scan(/(.+)件中/)[0][0].to_i
38
- row_nums = (21..(21 + (page_num * 3) -1)).to_a
132
+ row_nums = (21..(21 + (page_num * 3) - 1)).to_a
39
133
  records = []
40
134
  row_nums.each_slice(3).to_a.map do |col_num|
41
135
  detail = {}
@@ -72,29 +166,30 @@ module RakutenSecuritiesScraper
72
166
  end
73
167
 
74
168
  def all_history
75
- driver = get_selenium_driver(:chrome)
169
+ @driver = get_selenium_driver(:chrome)
76
170
  wait = Selenium::WebDriver::Wait.new(timeout: 100)
77
171
  url = "https://www.rakuten-sec.co.jp/ITS/V_ACT_Login.html"
78
- driver.get url
79
- driver.find_element(id: "form-login-id").send_keys @login[:login_id]
80
- driver.find_element(id: "form-login-pass").send_keys @login[:login_pw]
81
- driver.find_element(id: "login-btn").click
82
- wait.until { driver.find_element(id: "header-menu-button-asset") }
83
- driver.action.move_to(driver.find_element(id: "header-menu-button-asset")).perform
84
- wait.until { driver.find_element(xpath: "/html/body/div[2]/div/div/div[2]/ul[1]/li[1]/ul/li[1]/a") }
85
- driver.find_element(xpath: "/html/body/div[2]/div/div/div[2]/ul[1]/li[1]/ul/li[1]/a").click
172
+ @driver.get url
173
+ @driver.find_element(id: "form-login-id").send_keys @login[:login_id]
174
+ @driver.find_element(id: "form-login-pass").send_keys @login[:login_pw]
175
+ @driver.find_element(id: "login-btn").click
176
+ wait.until { @driver.find_element(id: "header-menu-button-asset") }
177
+ @driver.action.move_to(@driver.find_element(id: "header-menu-button-asset")).perform
178
+ wait.until { @driver.find_element(xpath: "/html/body/div[2]/div/div/div[2]/ul[1]/li[1]/ul/li[1]/a") }
179
+ @driver.find_element(xpath: "/html/body/div[2]/div/div/div[2]/ul[1]/li[1]/ul/li[1]/a").click
86
180
 
87
181
  sleep 3
88
- span_select = Selenium::WebDriver::Support::Select.new(driver.find_element(:id, "termCd"))
182
+ span_select = Selenium::WebDriver::Support::Select.new(@driver.find_element(:id, "termCd"))
89
183
  span_select.select_by(:value, "ALL")
90
184
 
91
- driver.find_element(css: "input[type='image']").click
185
+ @driver.find_element(css: "input[type='image']").click
92
186
  sleep 2
93
- rows = driver.find_elements(xpath: "//tr")
187
+ rows = @driver.find_elements(xpath: "//tr")
94
188
  page_num = rows[8].text.scan(/(.+)件中/)[0][0].to_i
95
- trade_table_data driver, page_num
96
- ensure
97
- driver.quit
189
+ trade_table_data @driver, page_num
190
+ rescue StandardError => e
191
+ puts e
192
+ @driver.quit
98
193
  end
99
194
 
100
195
  def todays_history
@@ -105,7 +200,8 @@ module RakutenSecuritiesScraper
105
200
  driver.find_element(id: "form-login-id").send_keys @login[:login_id]
106
201
  driver.find_element(id: "form-login-pass").send_keys @login[:login_pw]
107
202
  driver.find_element(id: "login-btn").click
108
- wait.until { driver.find_element(id: "header-menu-button-asset") }
203
+ sleep 2
204
+ # wait.until { driver.find_element(id: "header-menu-button-asset") }
109
205
  driver.action.move_to(driver.find_element(id: "header-menu-button-asset")).perform
110
206
  sleep 2
111
207
  wait.until { driver.find_element(xpath: "/html/body/div[2]/div/div/div[2]/ul[1]/li[1]/ul/li[1]/a") }
@@ -128,7 +224,7 @@ module RakutenSecuritiesScraper
128
224
  def trade_table_data driver, page_num
129
225
  run_times = page_num.divmod(20)
130
226
  trade_records = []
131
- (1..run_times[0]-1).each do |f|
227
+ (1..run_times[0] - 1).each do |f|
132
228
  rows = driver.find_elements(xpath: "//tr")
133
229
  rows[10..29].map do |row|
134
230
  cells = row.find_elements(:css, "td").map { |a| a.text.strip.gsub(",", "") }
@@ -163,7 +259,7 @@ module RakutenSecuritiesScraper
163
259
  return trade_records
164
260
  end
165
261
  rows = driver.find_elements(xpath: "//tr")
166
- rows[10.."1#{run_times[1]}".to_i-1].map do |row|
262
+ rows[10.."1#{run_times[1]}".to_i - 1].map do |row|
167
263
  cells = row.find_elements(:css, "td").map { |a| a.text.strip.gsub(",", "") }
168
264
  trade_records << {
169
265
  bit_date: cells[0].split("\n")[0],
@@ -200,7 +296,7 @@ module RakutenSecuritiesScraper
200
296
  # options.add_argument("--ignore-certificate-errors")
201
297
  options.add_argument("--disable-popup-blocking")
202
298
  options.add_argument("--disable-translate")
203
- options.add_argument("-headless")
299
+ # options.add_argument("-headless")
204
300
  Selenium::WebDriver.for :chrome, options: options
205
301
  end
206
302
  end
@@ -1,3 +1,3 @@
1
1
  module RakutenSecuritiesScraper
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.8"
3
3
  end
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.summary = "楽天証券スクレイパー / Rakuten Securities Scraper"
10
10
  spec.description = "This gem is providing scraper methods for everyone to be able to make stock trading applications without writing scraper codes."
11
11
  spec.homepage = "https://github.com/elsoul/rakuten_securities"
12
- spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
12
+ spec.required_ruby_version = Gem::Requirement.new(">= 3.0.0")
13
13
  spec.license = "MIT"
14
14
  spec.metadata["homepage_uri"] = spec.homepage
15
15
  spec.metadata["source_code_uri"] = "https://github.com/elsoul/rakuten_securities_scraper"
@@ -23,4 +23,8 @@ Gem::Specification.new do |spec|
23
23
  spec.bindir = "exe"
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
25
  spec.require_paths = ["lib"]
26
+ spec.add_development_dependency "bundler", "~> 2.0"
27
+ spec.add_development_dependency "rake", ">= 12.3.3"
28
+ spec.add_development_dependency "rspec", "~> 3.0"
29
+ spec.add_runtime_dependency "selenium-webdriver", "~> 3.142.7"
26
30
  end
metadata CHANGED
@@ -1,15 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rakuten_securities_scraper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - FUMI-POPPIN
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-13 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2021-01-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 12.3.3
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 12.3.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: selenium-webdriver
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.142.7
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.142.7
13
69
  description: This gem is providing scraper methods for everyone to be able to make
14
70
  stock trading applications without writing scraper codes.
15
71
  email:
@@ -21,6 +77,7 @@ files:
21
77
  - ".gitignore"
22
78
  - ".rspec"
23
79
  - ".rubocop.yml"
80
+ - ".ruby-version"
24
81
  - ".travis.yml"
25
82
  - Gemfile
26
83
  - Gemfile.lock
@@ -39,7 +96,7 @@ metadata:
39
96
  homepage_uri: https://github.com/elsoul/rakuten_securities
40
97
  source_code_uri: https://github.com/elsoul/rakuten_securities_scraper
41
98
  changelog_uri: https://github.com/elsoul/rakuten_securities_scraper
42
- post_install_message:
99
+ post_install_message:
43
100
  rdoc_options: []
44
101
  require_paths:
45
102
  - lib
@@ -47,15 +104,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
47
104
  requirements:
48
105
  - - ">="
49
106
  - !ruby/object:Gem::Version
50
- version: 2.7.0
107
+ version: 3.0.0
51
108
  required_rubygems_version: !ruby/object:Gem::Requirement
52
109
  requirements:
53
110
  - - ">="
54
111
  - !ruby/object:Gem::Version
55
112
  version: '0'
56
113
  requirements: []
57
- rubygems_version: 3.1.3
58
- signing_key:
114
+ rubygems_version: 3.2.4
115
+ signing_key:
59
116
  specification_version: 4
60
117
  summary: 楽天証券スクレイパー / Rakuten Securities Scraper
61
118
  test_files: []