Class: Cxeed::Proxy

Inherits:
Object
  • Object
show all
Defined in:
lib/cxeed/proxy.rb

Constant Summary collapse

BACKSPACE =
"\ue003".freeze

Instance Method Summary collapse

Constructor Details

#initialize(credential, verbose: false, save_screenshot: false) ⇒ Proxy

Returns a new instance of Proxy.



8
9
10
11
12
13
14
15
# File 'lib/cxeed/proxy.rb', line 8

def initialize(credential, verbose: false, save_screenshot: false)
  caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions': {args: i(--headless --disable-gpu window-size=1920,1080)})
  @driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps

  @credential = credential
  @verbose = verbose
  @save_screenshot = save_screenshot
end

Instance Method Details

#arrive(time = Time.now.strftime('%H:%M'), date = Time.now) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/cxeed/proxy.rb', line 91

def arrive(time = Time.now.strftime('%H:%M'), date = Time.now)
  

  navigate_to_input_form

  open_date(date)

  # 出勤時間の入力
  work_field = @driver.find_element(:xpath, '//td[@id="grdXyw1100G-rc-0-6"]')
  @driver.action.send_keys(work_field, time).perform
  save_screenshot

  # 登録処理
  @driver.find_element(:xpath, '//input[@name="regbutton"]').click

  verbose_log "after click register button: #{ @driver.current_url }"
  save_screenshot
end

#day_attendance(day) ⇒ Object



143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/cxeed/proxy.rb', line 143

def day_attendance(day)
  

  navigate_to_input_form

  # 日付の整形
  day_str = DateTime.parse(day).strftime('%Y%m%d')

  # 処理期間の入力
  @driver.find_element(:xpath, '//input[@name="StartYMD"]').send_keys(BACKSPACE * 8)
  @driver.find_element(:xpath, '//input[@name="StartYMD"]').send_keys(day_str)
  @driver.find_element(:xpath, '//input[@name="EndYMD"]').send_keys(BACKSPACE * 8)
  @driver.find_element(:xpath, '//input[@name="EndYMD"]').send_keys(day_str)

  # 検索
  @driver.find_element(:xpath, '//input[@name="srchbutton"]').click


  date = @driver.find_element(:xpath, '//td[@id="grdXyw1100G-rc-0-0"]/nobr').text
  arrive_at = @driver.find_element(:xpath, '//td[@id="grdXyw1100G-rc-0-6"]/nobr').text
  leave_at = @driver.find_element(:xpath,  '//td[@id="grdXyw1100G-rc-0-9"]/nobr').text

  Cxeed::Attendance.new date, arrive_at, leave_at
end

#leave(time = Time.now.strftime('%H:%M'), date = Time.now) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/cxeed/proxy.rb', line 110

def leave(time = Time.now.strftime('%H:%M'), date = Time.now)
  

  navigate_to_input_form

  open_date(date)

  # 退勤時間の入力
  work_field = @driver.find_element(:xpath, '//td[@id="grdXyw1100G-rc-0-9"]')
  @driver.action.send_keys(work_field, time).perform
  save_screenshot

  # 登録処理
  @driver.find_element(:xpath, '//input[@name="regbutton"]').click

  verbose_log "after click register button: #{ @driver.current_url }"
  save_screenshot
end

#loginObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/cxeed/proxy.rb', line 17

def 
  verbose_log 'start login'

  @driver.navigate.to(@credential.)

  verbose_log "at #{ @driver.current_url }"
  save_screenshot

  # 会社コード入力
  @driver.find_element(:name, 'DataSource').send_keys(@credential.company_code)
  # 個人コード入力
  @driver.find_element(:name, 'LoginID').send_keys(@credential.employee_code)
  # パスワード入力
  @driver.find_element(:name, 'PassWord').send_keys(@credential.password)


  verbose_log "input DataSource: #{ @driver.find_element(:name, 'DataSource').attribute('value')}"
  verbose_log "input login id: #{ @driver.find_element(:name, 'LoginID').attribute('value')}"
  verbose_log "input password: #{ @driver.find_element(:name, 'PassWord').attribute('value')}"
  save_screenshot

  # ログイン処理
  @driver.find_element(:xpath, '//td[@class="loginBtn"]/a').click

  verbose_log "after click login page: #{ @driver.current_url }"
  save_screenshot
end

#login_testObject



45
46
47
48
49
# File 'lib/cxeed/proxy.rb', line 45

def 
  

  @driver.current_url
end


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/cxeed/proxy.rb', line 51

def navigate_to_input_form
  verbose_log "start navigate input form: frame2=#{ @driver.find_element(:name, 'FRAME2').attribute('src') }"
  save_screenshot

  # frameの指定
  @driver.switch_to.frame @driver.find_element(id: 'FRAME1')
  # 勤務データ入力遷移
  @driver.find_element(:xpath, '//a[@title="勤務データ入力"]').click

  # 一旦main documentに戻る
  @driver.switch_to.default_content
  # frameの指定
  @driver.switch_to.frame @driver.find_element(name: 'FRAME2')

  verbose_log "finish navigate input form: #{ @driver.current_url }"
  save_screenshot
end

#open_date(date) ⇒ Object

引数の日付の入力画面に遷移する



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/cxeed/proxy.rb', line 70

def open_date(date)
  verbose_log "start open date command: #{ @driver.current_url }: #{ @driver.find_element(:class, 'cxCmnTitleStr').text }"

  # 処理期間の入力
  @driver.find_element(:xpath, '//input[@name="StartYMD"]').send_keys(BACKSPACE * 8)
  @driver.find_element(:xpath, '//input[@name="StartYMD"]').send_keys(date.strftime('%Y%m%d'))
  @driver.find_element(:xpath, '//input[@name="EndYMD"]').send_keys(BACKSPACE * 8)
  @driver.find_element(:xpath, '//input[@name="EndYMD"]').send_keys(date.strftime('%Y%m%d'))


  verbose_log "input start date: #{  @driver.find_element(:xpath, '//input[@name="StartYMD"]').attribute('value') }"
  verbose_log "input end date: #{  @driver.find_element(:xpath, '//input[@name="EndYMD"]').attribute('value') }"
  save_screenshot

  # 検索
  @driver.find_element(:xpath, '//input[@name="srchbutton"]').click

  verbose_log "after click search button: #{ @driver.current_url }"
  save_screenshot
end

#todayObject



129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/cxeed/proxy.rb', line 129

def today
  

  navigate_to_input_form

  date = @driver.find_element(:xpath, '//td[@id="grdXyw1100G-rc-0-0"]/nobr').text
  arrive_at = @driver.find_element(:xpath, '//td[@id="grdXyw1100G-rc-0-6"]/nobr').text
  leave_at = @driver.find_element(:xpath, '//td[@id="grdXyw1100G-rc-0-9"]/nobr').text

  today = Cxeed::Attendance.new date, arrive_at, leave_at

  today
end