-
Notifications
You must be signed in to change notification settings - Fork 0
/
fimm_mpost.rb
208 lines (181 loc) · 6.75 KB
/
fimm_mpost.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
require 'selenium-webdriver'
Selenium::WebDriver::Edge::Service.driver_path \
= File.join '..\edgedriver.114.0.1823.18\edgedriver_win64', 'msedgedriver.exe'
#= File.join '..\edgedriver.112.0.1722.39\edgedriver_win64', 'msedgedriver.exe'
urls = {
twitter: 'https://twitter.com/home',
facebook: 'https://www.facebook.com/',
instagram: 'https://www.instagram.com/',
mixi: 'https://mixi.jp/home.pl',
fedibird: 'https://fedibird.com/web/timelines/home',
}
cookies = JSON File.read('../cookies.json'), symbolize_names: true
handles = {}
sleeping = 5
message = 'おはようございます'
message = 'テスト投稿'
images, downloads = [], 'C:\Users\hs9587\Downloads'
post = true
post = false
if ARGV.size > 0 then
message = ARGV.shift
images = ARGV
post = true
end # if ARGV.size > 0
driver = Selenium::WebDriver.for :edge
driver.get "https://www.google.com/"
# twitter
driver.get urls[:twitter]
cookies[:twitter].each{ driver.manage.add_cookie _1 }
driver.get urls[:twitter]
handles[:twitter] = driver.window_handle
if post and false then
driver.find_element(class: 'public-DraftEditor-content').send_keys message
input = driver.find_element(tag_name: "input") if images.size > 0
images.each do |img|
input.send_keys File.join(downloads, img)
end # images.each do |img|
driver.find_element(xpath: '//div[@data-testid="tweetButtonInline"]').click
end # if post
sleep sleeping
# facebook
#driver.manage.new_window :tab
driver.get urls[:facebook]
cookies[:facebook].each{ driver.manage.add_cookie _1 }
driver.get urls[:facebook]
handles[:facebook] = driver.window_handle
if post then
## クッキー設定後の描画後少しすると全体がグレイアウトするので画面をクリック
### スクリプト実行では違うのでコメントアウト。クリックするとむしろ駄目
driver.find_element(tag_name: 'body').click
## 入力欄をクリックすると投稿ダイアローグが開く
driver.find_element(
xpath: '//span[text()="Hi Shimuraさん、その気持ち、シェアしよう"]'
).click
## 投稿ダイアローグにて # 準備できるまでちょっと時間掛かる
wait = Selenium::WebDriver::Wait.new(:timeout => 10)
post_form = wait.until do
driver.find_element(
xpath: '//div[@aria-label="Hi Shimuraさん、その気持ち、シェアしよう"]'
)
end # post_form = Selenium::WebDriver::Wait.new(:timeout => 10).until do
post_form.send_keys message
if images.size > 0 then
shashin = driver.find_element(xpath: '//div[@aria-label="写真・動画"]')
shashin.click
#shashin = driver.find_element(xpath: '//div[@aria-label="写真・動画"]')
#sleep sleeping
input = wait.until do
driver.find_element(xpath: '//input[@type="file"]')
end # input = wait.until do
#input.attribute('outerHTML').+("\n").display
# 初回の input要素は動画っぽくて駄目なの一回書き飛ばす
input.send_keys File.join(downloads, images.first)
sleep sleeping
images.each do |img|
input = wait.until do
driver.find_element(xpath: '//input[@type="file"]')
end # input = wait.until do
#input.attribute('outerHTML').+("\n").display
input.send_keys File.join(downloads, img)
sleep sleeping
end # images.each do |img|
end # if images.size > 0
driver.find_element(
xpath: '//div[@aria-label="投稿"]'
).click
end # if post
sleep sleeping
# instagram
#driver.manage.new_window :tab
driver.get urls[:instagram]
cookies[:instagram].each{ driver.manage.add_cookie _1 }
driver.get urls[:instagram]
handles[:instagram] = driver.window_handle
# ログイン再開時、お知らせをオンにするかのダイアローグ開くので、後で
driver.find_element(xpath: '//button[text()="後で"]').click
sleep sleeping
if post and images.size > 0 then # インスタは画像がないとね
# 以下、なんか、xpath: //svg が効かなくて、tag_name: svg から選んでる
svgs = driver.find_elements(tag_name: 'svg')
# 投稿ダイアローグを出す
svgs.select{_1.attribute('aria-label')=='新規投稿'}.first.click
wait = Selenium::WebDriver::Wait.new(:timeout => 10)
input_multi = wait.until do
driver.find_element(xpath: '//input[@multiple]')
end # input_multi = wait.until do
images_multi = images.map{File.join downloads, _1}.join("\n")
input_multi.send_keys images_multi
# multiplle へはファイル名を改行区切りで転結する
sleep sleeping
driver.find_element(xpath: '//div[text()="次へ"]').click
sleep sleeping
driver.find_element(xpath: '//div[text()="次へ"]').click
caption = wait.until do
driver.find_element(xpath: '//div[@aria-label="キャプションを入力…"]')
end # caption = wait.until do
caption.send_keys message
driver.find_element(xpath: '//div[text()="シェア"]').click
end # if post and images.size > 0
sleep sleeping
# mixi
#driver.manage.new_window :tab
driver.get urls[:mixi]
cookies[:mixi].each{ driver.manage.add_cookie _1 }
driver.get urls[:mixi]
handles[:mixi] = driver.window_handle
if post then
driver.find_element(id: 'voiceComment' ).send_keys message
if images.size > 0 then
driver.find_element(xpath: '//a[@title="写真を追加"]').click
#ファイル選択が出てくる
input = driver.find_element(xpath: '//input[@name="photo"]')
#前行.click しないて見付からない
input.send_keys File.join(downloads, images.first)
# ひとつだけ
end # if images.size > 0
driver.find_element(id: 'voicePostSubmit').click
end # if post
sleep sleeping
# mastodon: fedibird
#driver.manage.new_window :tab
driver.get urls[:fedibird]
cookies[:fedibird].each{ driver.manage.add_cookie _1 }
driver.get urls[:fedibird]
handles[:fedibird] = driver.window_handle
if post then
driver.find_element(
xpath: '//textarea[@placeholder="今なにしてる?"]'
).send_keys message
images.each do |img|
input = driver.find_element xpath: '//input[@type="file"]'
input.send_keys File.join(downloads, img)
# 複数画像のときは、(xpath: '//input[@type="file"]') から繰り返す
uing = true
while uing do
sleep sleeping
begin# rescue Selenium::WebDriver::Error::NoSuchElementError
driver.find_element(class: 'upload-progress__message')
rescue Selenium::WebDriver::Error::NoSuchElementError
uing = false
end # rescue Selenium::WebDriver::Error::NoSuchElementError
end # while uing do
end # images.each do |img|
driver.find_element(
xpath: '//button[text()="トゥート!"]'
).click
end # if post
sleep sleeping
=begin
#
#driver.manage.new_window :tab
if post then
end # if post
# sleep sleeping
=end
driver.quit
def none
end # def none
if $PROGRAM_NAME == __FILE__ then
require 'optparse'
end # if $PROGRAM_NAME == __FILE__