LoginSignup
0
0

More than 3 years have passed since last update.

【ふくだ学習録】アプリ制作part9【36日目】

Posted at

ふくだ学習録とは?

ふくだが学習したことの備忘録。
目に見える形で残すことによってやる気を出す個人的な作戦です。
他人に見せるように書いているわけではないので、すごく読みにくいです。

読了した本

データベースエンジニア養成読本 [DBを自由自在に活用するための知識とノウハウ満載!]
ゼロから作るDeepLearning
PHPフレームワーク CakePHP 3入門
SQLアンチパターン
Docker入門

今読んでいる本

なし

アプリ制作

WebDriverWaitについて

seleniumは実行が早すぎるため、要素が表示される前にクロールしてしまう場合があり、クローリングが安定しない場合がある。WebDriverWait関数を用いることにより、任意のHTMLの要素が特定の状態になるまで待つことができるようになるので、クローリングが安定する。

使い方は下記のような感じ。

def get_dom(query):
   dom = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, query)))
   return dom

WebDriverWaitの第一引数でWaitさせたいWebDriverを指定し、第二引数でタイムアウトさせる秒数を設定する。
untilでは「WebDriverをWaitさせ続け条件」を記載する。上の例ではqueryで渡されたcssセレクタを持っているものが対象になる。
ECはexpected_conditionsをエイリアスで呼び出しており、presence_of_element_located関数でHTML要素の存在を確認している。この関数は何種類もあるので、設定したい条件に応じて別の関数を使用する。

Seleniumのコードを安定して動かすためにWaitを使って要素を待つ

動的に生成されるクラス名に対してのスクレイピング

動的に生成される静的なクラス名(ID名)の要素に対しては、スクレイピングで情報取得できるようになった。
ただ、動的に生成され、かつクラス名(ID名)も動的に生成される(毎回変わる)要素に関しては取得がうまくいかない。
次は下記の2つの方法を試してみる。

①固定IDで吐き出されるDOM要素からの相対パス指定。
②一定時間後にDOM全体をスナップショット(言葉遣いあってるかな?)して、その後解析
上記どちらがが良いのかな?っていう所感はある。

一旦は①を試してみて、難しそうならば②を試してみる。
(①で行けそうなんやけどなぁ)

今日の一言

早起き出来ひんくなってきた!あかん!朝型の体にする!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0