プロが教える店舗&オフィスのセキュリティ対策術

python初心者です。自分で課題を設定してトライしていますがいき
なり行き詰っています。
あるwebページのアクセスして表示内容を取得しようとしています。

次がpythonの記述です。

!pip3 install helium
from helium import *

driver = start_chrome('https://www.nict.go.jp/JST/JST5.html')
_items = find_all(S('td'))
items = [_item.web_element.text for _item in _items]

items

結果は、内容が表示されましたが、欲しい情報(ページで表示されて
いる時刻情報)は取得できませんでした。
たぶんhtmlの勉強不足なのが原因なのでしょうが、そもそも取得は無
理なんでしょうか?
find_all(S('td')) を find_all(S('input'))に変えてもダメでした。

python特にweb系に強いかたがいらっしゃいましたらご教示お願いいた
します。

A 回答 (2件)

web_element.text



web_element.value
または
web_element.get_attribute('value')
    • good
    • 0
この回答へのお礼

ご教示いただきましたように記述を変更したところ感激の結果を得られました。

!pip3 install helium
from helium import *
import time

driver = start_chrome('https://www.nict.go.jp/JST/JST5.html')
time.sleep(3)
_items = find_all(S('input.txtbox'))
items = [_item.web_element.get_attribute('value') for _item in _items]
items

結果は、
Out[4]:['2021/10/14 16:52:01',
'2021/10/14 07:52:01',
'2021/10/14 07:52:38',
'2021/10/14 16:52:01',
'2021/10/14 16:52:01',
'0.3 秒 遅れています']

の通り完璧に取得できました。

Ogre7077様 本当に感激です。ありがとうございました。

VBA + IE では同じようなことを実現したことがありますが、プログラムのステップ数は比較にならないほどpythonは短く、圧倒されました。

time.sleep(3)がないとデータの表示が完了するまでにfind_allを実行してしまいデータの内いくつかは欠落してしまいます。
やむを得ず3秒待つもとにしましたが、
VBA + IE で記述する
Do While .Busy = True
DoEvents
Loop や

Do While .document.readyState <> "complete"
DoEvents
Loop
のような処理はpythonでは、どのように記述するのでしょうか。
厚かましく質問を重ねてしまい申し訳ありませんが、ご教示いただければ幸せです。

お礼日時:2021/10/14 17:13

取得すべき要素: S('input.txtbox')


取得すべき属性: <INPUT> 要素の value および name
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。
やはり勉強不足で頂いた回答を十分理解することができないまま
_items = find_all(S('input.'))を
_items = find_all(S('input.txtbox'))に変更してトライしましたが
結果は
Out[4]: ["","","","","",""]となり、ページで表示している時刻は取得
できませんでした。

お礼日時:2021/10/14 11:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!