回答編集履歴
1
AWSでの実行結果を追記
answer
CHANGED
@@ -1,3 +1,90 @@
|
|
1
|
+
## 追記
|
2
|
+
実際にlambdaで同スクリプトを実行してみました。確かに同じ現象が起こります。
|
3
|
+
しかもリージョンが北米でも大阪でも結果が同様でした。
|
4
|
+
|
5
|
+
おそらくはjavascript上で返すDateがタイムゾーンなしのUTCで、ページ上での時刻処理に何らかの影響を及ぼしていると思います。(天気図HPのスクリプトはminifyされていて解析が困難です)
|
6
|
+
起点の時間が33時間前になっていると思われます(1日と9時間)
|
7
|
+
|
8
|
+
さらに不可解な挙動が、AWS上で「ひとつ前の時間を表示」ボタンをクリックするとひとつ前の天気図ではなく最も未来の予想天気図が表示されることです。
|
9
|
+
この状態で、さらに「ひとつ前の時間を表示」ボタンをクリックすると最新の実況天気図になります。
|
10
|
+
|
11
|
+
全く理屈が不明ですが、とりあえず「ひとつ前の時間を表示」を2回クリックすることで目的の天気図になります。
|
12
|
+
|
13
|
+
検証コード:
|
14
|
+
```python
|
15
|
+
#ブラウザの定義
|
16
|
+
driver = webdriver.Chrome(
|
17
|
+
"/opt/headless/python/bin/chromedriver",
|
18
|
+
options=options
|
19
|
+
)
|
20
|
+
|
21
|
+
driver.get(URL)
|
22
|
+
# scriptで画像表示処理をしているらしい。ちょっと待つ
|
23
|
+
time.sleep(3)
|
24
|
+
title = driver.title
|
25
|
+
viewdate = driver.find_element_by_css_selector('div.weather-map-time-label').text
|
26
|
+
print("title", title)
|
27
|
+
print("viewdate", viewdate)
|
28
|
+
img = driver.find_element_by_css_selector('.weather-map-viewarea img').get_attribute('src')
|
29
|
+
print("img", img);
|
30
|
+
|
31
|
+
# 1つ前の画像を押してみる
|
32
|
+
print("ひとつ前の時間を表示")
|
33
|
+
driver.find_element_by_css_selector('img[title="ひとつ前の時間を表示"]').click()
|
34
|
+
time.sleep(1)
|
35
|
+
viewdate = driver.find_element_by_css_selector('div.weather-map-time-label').text
|
36
|
+
print("viewdate", viewdate)
|
37
|
+
img = driver.find_element_by_css_selector('.weather-map-viewarea img').get_attribute('src')
|
38
|
+
print("img", img);
|
39
|
+
|
40
|
+
# 1つ前の画像を押してみる
|
41
|
+
print("ひとつ前の時間を表示")
|
42
|
+
driver.find_element_by_css_selector('img[title="ひとつ前の時間を表示"]').click()
|
43
|
+
time.sleep(1)
|
44
|
+
viewdate = driver.find_element_by_css_selector('div.weather-map-time-label').text
|
45
|
+
print("viewdate", viewdate)
|
46
|
+
img = driver.find_element_by_css_selector('.weather-map-viewarea img').get_attribute('src')
|
47
|
+
print("img", img);
|
48
|
+
|
49
|
+
imgname = "/tmp/screenshot.png"
|
50
|
+
sfile = driver.get_screenshot_as_file(imgname)
|
51
|
+
print("スクリーンショット保存: --> " + imgname)
|
52
|
+
print("成功したか?", sfile)
|
53
|
+
|
54
|
+
|
55
|
+
# 最新表示ボタンを押す
|
56
|
+
driver.find_element_by_css_selector('.contents-button').click()
|
57
|
+
time.sleep(1)
|
58
|
+
viewdate = driver.find_element_by_css_selector('div.weather-map-time-label').text
|
59
|
+
print("viewdate", viewdate)
|
60
|
+
img = driver.find_element_by_css_selector('.weather-map-viewarea img').get_attribute('src')
|
61
|
+
print("img", img);
|
62
|
+
driver.close()
|
63
|
+
```
|
64
|
+
|
65
|
+
実行ログ:
|
66
|
+
```text
|
67
|
+
/var/task
|
68
|
+
title 気象庁|天気図
|
69
|
+
viewdate 2021年05月30日12時の実況
|
70
|
+
img http://www.jma.go.jp/bosai/weather_map/data/png/20210530050231_0_Z__C_010000_20210530030000_MET_CHT_JCIspas_JCP600x581_JRcolor_Tjmahp_image.png
|
71
|
+
ひとつ前の時間を表示
|
72
|
+
viewdate 2021年06月02日09時の予想
|
73
|
+
img http://www.jma.go.jp/bosai/weather_map/data/png/20210531065231_0_Z__C_010000_20210531000000_MET_CHT_JCIfsas48_Rjp_JCP600x581_JRcolor_Tjmahp_image.png
|
74
|
+
ひとつ前の時間を表示
|
75
|
+
viewdate 2021年05月31日21時の実況
|
76
|
+
img http://www.jma.go.jp/bosai/weather_map/data/png/20210531140801_0_Z__C_010000_20210531120000_MET_CHT_JCIspas_JCP600x581_JRcolor_Tjmahp_image.png
|
77
|
+
スクリーンショット保存: --> /tmp/screenshot.png
|
78
|
+
成功したか? True
|
79
|
+
viewdate 2021年05月30日12時の実況
|
80
|
+
img http://www.jma.go.jp/bosai/weather_map/data/png/20210530050231_0_Z__C_010000_20210530030000_MET_CHT_JCIspas_JCP600x581_JRcolor_Tjmahp_image.png
|
81
|
+
```
|
82
|
+
なお、天気図の画像は[気象庁が公開?しているAPI](https://www.jma.go.jp/bosai/weather_map/data/list.json)でJSON形式で画像ファイル名が取得できます。このリストは画像ファイル名だけですが画像ファイルまでのパスを適切に組み合わせることにより天気図を直に取得することができます。
|
83
|
+
なので、スクリーンショットをとる必要はないのではとも思います。
|
84
|
+
(画像は直リンクできるし、JSONを返すAPIはクロスドメイン制約を無効にしているので自由につかっていいのではなかろうか、どうだろうか)
|
85
|
+
|
86
|
+
## 以前の回答
|
87
|
+
|
1
88
|
本当に提示のスクリプトをAWS上で実行しているのであれば、`lambda_handler`関数は実行されていないので実行時にスクリーンショットも取得されていません。
|
2
89
|
(関数実行する文がコメントアウトされている)
|
3
90
|
1日前にテストしたスクリーンショットを見ているだけなのでは?
|