格下サラリーマンの備忘録

備忘録や何でも日記

Selenium

Seleniumとの出会い


WEBスクレイピングをしたいと思って調べてた時に出会いました。
スクレイピングは、他社などのウェブサイトから情報を取得することをいいます。

簡素な物でしたら、PHPでwgetコマンドで取得できていましたが、色んな壁にぶつかり易いので、こちらを使ってみると、とても便利で、簡単で重宝しています。

主にPythonやVBAで使います。

Pythonの方が、汎用は聞くのですが、業務上エクセルはとてもよく使いますのでVBAも便利。

VBAの方はと言いますと、エクセルにまとめたデータを、WEB管理画面に入力したり、またはその逆に、WEBの管理画面データより情報を取得する場合に重宝します。
説明上、chromeで説明していますが、Microsoft Edgeや、Firefoxも使えます。

WEBスクレイピング自体、色々な問題もあるようですので、注意が必要です。
「情報解析」を目的としている場合にかぎっては、著作権者の同意を受ける必要はないとも言われておりますが、相手方サイトに大きな負荷をかけてしまうような事が無いよう注意が必要ですね。
他にも著作権的な問題が生じる事もありますので、自己責任でお願いします。


以下の操作は管理者権限で実行する内容を含み危険を伴う作業です。
すべての環境における動作確認等を確認しておりませんので、いかなる結果に対しても自己責任でお願いします。

また、説明は簡素化されていますので、詳細等は、ご本人で確認くださいませ。

PythonでSelenium使うための環境準備


1.pythonのインストール
yum install -y python36u python36u-libs python36u-devel python36u-pip

2.確認
which python3
python3 -V

3.コマンドをalias登録
alias py3=’/usr/bin/python3.6′
alias pip3=’/usr/bin/pip3.6′

4.Seleniumのインストール
pip3 install –upgrade pip
pip3 install selenium

5.Chromeインストール用リポジトリ追記
vi /etc/yum.repos.d/google-chrome.repo


[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl.google.com/linux/linux_signing_key.pub

6.Chromeインストール
yum install google-chrome-stable –enablerepo=google-chrome

7.ドライバの更新
https://sites.google.com/a/chromium.org/chromedriver/home

★バージョンを合わせる(driverDLの際に合わせたものをDL)
google-chrome-stable –version
google-chrome –version

8.ChromeDriverで文字化けしないようにインストール
yum -y install libX11 GConf2 fontconfig

VBAでSelenium使うための環境準備



1.Seleniumのインストール
こちらよりダウンロード
https://florentbr.github.io/SeleniumBasic/

確認した時点では、こちらが最新
SeleniumBasic v2.0.9.0

2.Chromeドライバーのインストール
 更新ファイルの保存場所:C:\Users\「ユーザー名」\AppData\Local\SeleniumBasic
https://sites.google.com/a/chromium.org/chromedriver/home

3.ドライバの更新
https://sites.google.com/a/chromium.org/chromedriver/home
※Windowsで使っているchromeが更新されるとdriverも更新する必要がある

4.VBA設定
Excel VBA エディタの「ツール」→「Selenium Type Library」にチェック

5.chormeDriverが動かない場合:
必要なバージョンの .NET Framework がインストールされていない。
上記環境では .NET Framework 3.5
また、Windows10では、「Windows の機能の有効化」より有効にする必要がある

PythonのSeleniumサンプル


#要素の取得例
driver.find_element_by_name(“q”)
driver.find_elements(By.TAG_NAME, “a”):
driver.find_element_by_css_selector(‘.dtl.yjSt’).text
driver.find_element(By.CLASS_NAME, “postAllMouth”)
driver.find_element_by_tag_name(“table”).find_elements_by_tag_name(“tr”)
driver.find_element_by_id(“recentcomments”)

#全画面スクリーンショット
driver.get(‘https://**’)
#ページサイズを画面サイズに設定する
page_width = driver.execute_script(‘return document.body.scrollWidth’)
page_height = driver.execute_script(‘return document.body.scrollHeight’)
driver.set_window_size(page_width, page_height)
driver.implicitly_wait(20)

#キャプチャ
driver.save_screenshot(filePath)
‘テーブルデータの取得
table = find_element_by_tag_name(“table”)
rows = table.find_elements_by_tag_name(“tr”)
for row in rows:
cells = row.find_elements_by_tag_name(“td”)
for col in cells:
print col.text

VBAのSeleniumサンプル
VBAは、変数を宣言(Dim driver As ChromeDriver)すると、補完機能が使えます。

‘宣言
Dim driver As New ChromeDrive
driver.Get (“https://***”)

・要素の取得例
‘テキスト取得
Dim eleText as String
eleText = driver.FindElementByTag(“h3”).text
eleText = driver.FindElementByName(“form1”).FindElementByName(“date”)
eleText = driver.FindElementsByTag(1).FindElementByName(“date”)
eleText = driver.FindElementsByClass(“conf_list”)(4).text

Dim ele As WebElement
ele = driver.FindElementsByTag(1)
eleText = ele.FindElementByName(“date”).text

‘リンクアドレス
href = ele.FindElementsByTag(“a”)(2).Attribute(“href”)

‘optionタグ
For Each ele In driver.FindElementByName(“FORM”).FindElementsByTag(“option”)
MsgBox (opTag.Value)
MsgBox (opTag.text)
Next opTag

‘テーブルデータを配列に格納
Dim tableData As Variant
tableData = driver.FindElementByTag(“table”).AsTable.data
For j = 1 To UBound(tableData, 1) ‘1次元の要素数の数を繰り返す
ReDim row(UBound(tableData, 2))
For k = 1 To UBound(tableData, 2) ‘2次元の要素数の数を繰り返す
row(k) = (tableData(j, k))
Next
Next

ElementとElementsは別物ですのでご注意。

スポンサーサイト



  1. 2020/11/04(水) 16:59:50|
  2. Selenium
  3. | トラックバック:0
  4. | コメント:0

コメント

<%template_post\comment>


管理者にだけ表示を許可する

トラックバック

トラックバック URL
https://don3893.blog.fc2.com/tb.php/43-538eb193
この記事にトラックバックする(FC2ブログユーザー)