このページでは、TeilabPythonの作成方法をご紹介しています。
TeilabPythonは、PythonやVSCode自体をインストールしないため、配布後に環境変数の設定やライブラリのインストールも不要です。
そのため、自分用(複数PCで共有)、社内やユーザー配布用など、どんな環境でもすぐに使うことができます。
それとVScode(zip版)内でpipコマンドも使えるため、後でライブラリを追加もでき開発の練習用として配布も可能です。
ノーノちゃん
テイくん
このページの目次
1. まずはじめに
今回ご紹介するTeilabPythonの完成したものは、以下からダウンロードできます。
【TeilabPython】Seleniumでブラウザ自動化!初期設定なし!【PART.1】
そのため、Seleniumでブラウザ操作の自動化が目的の方に役立つ内容ではありません。
2. 使用用途について
以下の3通りの状況でTeilabPythonが役立ちます。
- 自分用
- 社内配布用
- ユーザー配布用
①自分用
複数のPCがある場合、Pythonの環境構築、VScode拡張機能やsetting.jsonを設定すると時間が掛かります。
それとPCの故障、もしくは新しくPC購入や初期化する場合、再度インストールや環境構築をしないといけません。
そのため、クラウドストレージ(Dropbox、Google Drive、OneDriveなど)に入れておけば、再設定が不要になるので便利です。
②社内配布用
社内用にテストツールを作った場合などに簡単に配布できます。
もし社内用のクラウドストレージ(Dropbox、Google Driveなど)があれば、配布しなくても簡単に社員全員で使えます。
それと、ツールを更新した場合、再配布の必要もないのですごく便利です。
③ユーザー配布用
まずは、作成した無料ツールをサイトやブログなどに、zipフォルダにしてアップロードします。
そして、アップロードしたフォルダURLを載せておけば、誰でも簡単に使ってもらうことができます。
もしくは「LINE」「ChatWork」「Slack」「メール」などでも配布が可能です。
ただ容量が大きいため、「ギガファイル便」などのファイル転送サービスが必須です。
exe化はウィルスソフトに誤検知される
PyInstallerでexe化して配布すると、ファイル自体を高確率で駆除される可能性があります。
主要なウイルスソフトのNorton、ウイルスバスター、AVAST、AVGなどは「トロイの木馬ウイルス」と誤認されます。
理由は、クラッカー(ハッカー)がよくPyInstallerを使って、ウィルスを作成しているから誤検知されると言われています。
それと、昔回避できていた以下ような方法も、現在は効果がありません。
参考
PyInstallerでexeファイル化したものがAVASTやAVGでトロイの木馬ウイルスと誤認される問題の一時的な解決法Qiita
そのため、プログラムのみ難読化してTeilabPythonをユーザーさんに配布すれば誤検知される心配はありません。
ちなみ、Windows Defenderの場合は、セキュリティ警告が出てもそのまま起動すれば大丈夫です。
ノーノちゃん
テイくん
3. 作成手順
作成手順は、以下のようになります。
【STEP.1】WinPythonをダウンロード
ダウンロード
下記から「Winpython64-3.11.5.0dot.exe」をダウンロードします。
https://sourceforge.net/projects/winpython/files/WinPython_3.11/3.11.5.0/
※通常版ではなく必ずdot版を選んでください。
大量のライブラリが最初からインストールされているバージョンです。自分だけが使うなら問題ありませんが、配布する場合zipでの圧縮は容量の関係上難しいです。
通常版とは違い、Pythonを実行するのに最低限の環境があるバージョンです。ただ、一般的にあまり使用しないライブラリも多数含まれています。
そのため、【STEP.7】で一括削除します。
「通常版」と「dot版」では、追加したライブラリが格納されているsite-packages内のファイル数や容量が100倍以上違います。
WPy64-31150\python-3.11.5.amd64\Lib\site-packages
ファイル数 | 容量 | |
---|---|---|
通常版 | 140,039 | 3.31GB |
dot版 | 1,977 | 21.7MB |
参考 WinPython FilesSourceforge
exeファイルをクリックして解凍
ダウンロードしたWinpython64-3.11.5.0dot.exeファイルを起動します。
Extractをクリックすると展開(解凍)が始まります。
展開が終了すると、以下のようにWPy64-31150が表示されます。
【STEP.2】必要なフォルダのみ移動
新しくフォルダを作成
新規フォルダ(TeilabPython)を作成します。
PythonをTeilabPythonフォルダに移動
WPy64-31150内で必要なのはpython-3.11.5.amd64だけです。
他に色々ソフトがありますが、python-3.11.5.amd64のみをTeilabPython内に移動させます。
今後、このTeilabPython内に各ソフトを配置していきます。
このAMD社が作った技術ですが、Intel(インテル)社のCPUでも使用可能です。
以下の、各会社のCPU名を確認すればイメージしやすいかと思います。
それと「64」は、64bit版のOSでのみ動作可能という意味です。そのため32bit版では動きません。
ただ、現在ほとんどが64bit版のため、あまり気にする必要はないです。
【STEP.3】VSCode(zip版)をダウンロード
ダウンロード
下記から「.zipのX64」をダウンロードします。
https://code.visualstudio.com/Download
VSCodeのzipフォルダを展開
ダウンロードしたVSCode-win32-x64-◯◯.zipを展開(解凍)します。
VSCode内にdataフォルダ作成 ※重要
先程展開したVScode内に、空のdataを作成します。
そのため設定をしても「VScode(zip版)」には反映されず、既存の「VScode(インストール版)」の設定が変わってしまいます。
少し分かりにくいですが、必ずdataを作成してください!
VSCodeを起動
Code.exeをクリックしてVScodeを起動します。
起動すると、以下のような英語表記でダークテーマのVScodeが立ち上がります。
ただ、拡張機能がすでにインストールされている場合は、dataの作成し忘れがないか再度確認してください。
【STEP.4】拡張機能を追加
拡張機能で日本語表記に変更
「①拡張機能のマークをクリック」検索窓に「②japanese Language Pack for Visual Studio Codeと入力」「③Installをクリック」します。
右下にメッセージが表示されるので「Change Language and Restartをクリック」すると再起動します。
そうすると以下のように日本語表記に変更されます。
各拡張機能をインストール
各拡張機能をインストールしていきます。
拡張機能名 | 詳細 |
---|---|
Material Icon Theme | ファイルのアイコン装飾 |
Atom One Light Theme | windowsのUI(操作画面)に似た通常テーマ |
Python | Pythonでプログラミングをする時に、間違いや誤字やコードをきれいに整形してくれる |
Edit csv | CSVファイルを見やすく表示したり編集できる |
検索窓に「①拡張機能名を入力」「②インストールをクリック」の作業を繰り返します。
ただ、そのまま最新バージョンのPylanceは、標準ライブラリimport時に以下のようなエラーを吐きます。
エラー詳細: 〇〇 モジュール "〇〇" をオーバーライドしていますPylancereportShadowedImports
検証した結果、Pylanceの「v2022.11.30」であれば正常にエラーチェックしてくれます。
【STEP.5】setting.json作成
setting.jsonを開く
「①歯車マークをクリック」「②コマンドパレットをクリック」します。
上部に表示された検索窓に「①open settings jsonと入力」「②基本設定:ユーザー設定を開く(JSON)をクリック」します。
以下のようにsettings.jsonの編集画面が表示されます。
setting.jsonにコード追加
settings.jsonに以下のコードを貼り付けします。
{
// 表示関係
"workbench.iconTheme": "material-icon-theme", // アイコン装飾
"workbench.colorTheme": "Atom One Light", // テーマ設定
"editor.stickyScroll.enabled": true, // スティッキースクロール有効(上部に関数開始の部分を固定)
"editor.renderWhitespace": "all", // すべての空白文字を表示
"workbench.startupEditor": "none", // 起動時のウェルカムページを無効(初回のみ無効不可)
// 更新関係
"update.mode": "manual", // VScode更新のお知らせ停止
"extensions.autoUpdate": false, // 拡張機能自動アップデート停止
"extensions.autoCheckUpdates": false, // 拡張機能アップデート確認停止
// 保存
"files.autoSave": "afterDelay", // 編集後に自動保存する設定
// 環境構築
"python.createEnvironment.trigger": "off", // 仮想環境構築の案内停止
"python.defaultInterpreterPath": "python-3.11.5.amd64\\python.exe", // Pythonインタープリターのパス設定
"terminal.integrated.env.windows": { // ターミナルの設定(環境変数のパス)
"PATH": "${workspaceFolder}\\python-3.11.5.amd64;${workspaceFolder}\\python-3.11.5.amd64\\Scripts;${env:PATH}"
},
}
setting.jsonを保存して再起動
「①メニューをクリック」「②ファイルをクリック」③「保存をクリック」します。
そうすると以下のような画面が表示されますので、「再起動をクリック」します。
VScodeを終了させてTeilabPythonに移動
「☓をクリック」してVScodeを終了させます。
その後、VSCode-win32-x64-◯◯をTeilabPythonに移動させます。
【STEP.6】ターミナル起動
VScodeを起動
「①TeilabPython」「②VSCode-win32-x64-◯◯」「③Code.exe」の順にクリックしてVScodeを起動させます。
TeilabPythonをVScode内で開く
「フォルダを開くをクリック」します。
「①TeilabPythonを選択」して「②フォルダの選択をクリック」します。
「はい、作成者を信頼しますをクリック」します。
ターミナル起動
「①メニュー」「②ターミナル」「③新しいターミナル」の順にクリックします。
以下のようにターミナル内にpwsh(PowerShell)が表示されます。
【STEP.7】ライブラリ削除
環境の確認 ※重要
ターミナル内に以下のコマンドを入れて、pipの場所を確認します。
pip --version
もしも違う場所のpipが表示された場合は、【STEP.5】setting.json作成の手順をもう一度やり直してください。
このまま、次の項目(不要なライブラリ削除)のコマンドを実行すると既存のライブラリが全て削除されてしまいます。
不要なライブラリ削除
ターミナル内に以下のコマンドを入れて、pipとsetuptools以外を全て削除します。
pip list --format=freeze | Where-Object {$_ -notmatch 'pip' -and $_ -notmatch 'setuptools'} | ForEach-Object {pip uninstall ($_.Split('==')[0]) -y}
pip list --format=freeze
それと--format=freeze
は、表示形式を「パッケージ名(ライブラリ名)==バージョン」に変更するオプションです。
package1==1.0.0
package2==2.0.0
もしも入れない場合は、以下のような通常の表示形式になり一括削除ができません。
Package Version
---------- -------
package1 1.0.0
package2 2.0.0
| Where-Object {$_ -notmatch 'pip' -and $_ -notmatch 'setuptools'}
| ForEach-Object {pip uninstall ($_.Split('==')[0]) -y}
それと-y
は、確認メッセージを非表示にするオプションです。
【STEP.8】ライブラリ追加
ライブラリ追加
以下のコマンドを入れて各ライブラリを追加します。
pip install selenium pandas requests beautifulsoup4
PS C:\Users\PC\Desktop\TeilabPython>
の表示が出るまで待ちましょう。追加したライブラリ確認
pip list
依存関係も含めて、約30個のライブラリがインストールされます。
ライブラリ | 簡易説明 |
---|---|
NumPy | 多次元配列の操作や数値計算 |
python-dateutil | 日付と時刻を操作 |
pytz | 世界のタイムゾーンのデータベースを使用 |
bottleneck | 数値計算の速度を早くする |
numexpr | 配列操作の速度を早くする |
依存関係を簡単に言うと、pandasを動かすために必要なライブラリ(NumPy、python-dateutilなど)のことです。そのため依存関係のライブラリがないと動きません。
【STEP.9】Chromeボータブル版ダウンロード
ダウンロード
下記から「Google Chrome Portable」をダウンロードします。
https://portableapps.com/apps/internet/google_chrome_portable
exeファイルをクリックして起動
ダウンロードした「GoogleChromePortable_〇〇_online.paf.exe」をクリックします。
そうすると以下の画面が表示されますので「OKをクリック」します。
セットアップ開始
「次へをクリック」します。
使用許諾契約に同意
「同意するをクリック」します。
インストール先の選択
「インストールをクリック」します。
セットアップ完了
「完了するをクリック」します。
セットアップが完了すると以下のようにGoogleChromePortableが表示されます。
【STEP.10】GoogleChromePortable.ini作成
GoogleChromePortable開く
「GoogleChromePortableをクリック」して開きます。
GoogleChromePortable.iniを新規作成
空の「GoogleChromePortable.iniを作成」します。
GoogleChromePortable.iniを編集
以下のコードを追加します。
; このファイルの元データは以下に格納されています
; GoogleChromePortable\Other\Source\GoogleChromePortable.ini
[GoogleChromePortable]
; 起動時コマンドラインにオプション追加
; 間違えて更新するとseleniumが動かなくなるため「background通信」「アップデート通知」の両方を停止
; スタートアップガイド停止
AdditionalParameters="--disable-background-networking --disable-component-update --no-first-run"
今回は、GoogleChromePortableに起動オプションを追加するために使用しています。
他の起動オプションを知りたい方はこちら
参考
Google Chrome 起動オプション 一覧ABHP.net
【STEP.11】Preferences編集
Preferencesを開く
まずは「Preferencesを開きます」
ファイルの場所はGoogleChromePortable\App\DefaultData\profile\Default
の中にあります。
Preferencesを編集
既存のコードを削除して以下のコードで上書きします。
{
"intl": {
"accept_languages": "ja,en-US",
"selected_languages": "ja,en-US"
},
"translate": {
"blocked_languages": ["ja"]
},
"bookmark_bar": {
"show_on_all_tabs": true
},
"devtools": {
"preferences": {
"currentDockState": "\"bottom\"",
"language": "\"browserLanguage\""
}
},
"browser": {
"check_default_browser": false,
"should_reset_check_default_browser": false,
"default_browser_infobar_last_declined": "16274190850000000"
},
"in_product_help": {
"snoozed_feature": {
"IPH_DesktopCustomizeChrome": {
"is_dismissed": true,
"last_dismissed_by": 0,
"last_show_time": "13344072705096194",
"last_snooze_duration": "0",
"last_snooze_time": "0",
"show_count": 1,
"shown_for_apps": [],
"snooze_count": 0
}
}
}
}
"intl": {
"accept_languages": "ja,en-US",
"selected_languages": "ja,en-US"
},
"accept_languages": "ja,en-US"
:ブラウザで優先して使用する言語を「日本語」と「英語」に設定しています。セットアップ時に日本語を選んでも、英語になる場合があるので念のため入れています。
"selected_languages": "ja,en-US"
:上記とほぼ同じ役割です。
"translate": {
"blocked_languages": ["ja"]
},
"blocked_languages": ["ja"]
:日本語ページの自動翻訳をしない設定です。この設定がないと、日本語ページでも「Google translate」が立ち上がり作業の邪魔になります。
"bookmark_bar": {
"show_on_all_tabs": true
},
"show_on_all_tabs": true
:最初からブックマークバーを常に表示する設定です。
"devtools": {
"preferences": {
"currentDockState": "\"bottom\"",
"language": "\"browserLanguage\""
}
},
"currentDockState": "\"bottom\""
:デベロッパーツールの表示位置を下部に変更しています。最近のレスポンシブサイトは、ブラウザサイズによってクラス名や構造自体が変わるため、下部の方がselenium開発時にbugが発生しにくいです。ちなみにデフォルトは右側表示です。
"language": "\"browserLanguage\""
:一番最初にintlで設定したブラウザ言語、つまり日本語表記になります。
"browser": {
"check_default_browser": false,
"should_reset_check_default_browser": false,
"default_browser_infobar_last_declined": "16274190850000000"
},
"check_default_browser": false,
:chromeがデフォルトブラウザか確認しない設定です。
"should_reset_check_default_browser": false,
:再起動時にchromeがデフォルトブラウザか確認しない設定です。
"default_browser_infobar_last_declined": "16274190850000000"
:デフォルトブラウザの確認を、最後に拒否した日時を入れないと設定が反映されないため入れています。
上記は全て「既存のブラウザに設定しますか?」のポップアップを非表示にする設定です。
"in_product_help": {
"snoozed_feature": {
"IPH_DesktopCustomizeChrome": {
"is_dismissed": true,
"last_dismissed_by": 0,
"last_show_time": "13344072705096194",
"last_snooze_duration": "0",
"last_snooze_time": "0",
"show_count": 1,
"shown_for_apps": [],
"snooze_count": 0
}
}
}
snoozed_feature
:Chromeのカスタマイズ関連のヒントなどは、不要なため非表示にしています。最後にヒントを表示したユーザーID、時間、回数などを入れないと設定が反映されないため入れています。
筆者は、既存のPreferencesを上から順番に解析しJSONの中身を編集しましたが、凄く時間が掛かりました。
もしも設定がうまく反映されない場合や、カスタマイズしたい方は
- chrome://settings/
- chrome://flags/
などを検索窓に入れて設定、もしくは以下のサイトを参考にしてみてください。
参考
Configuring Other PreferencesThe Chromium Projects
GoogleChromePortableをTeilabPythonに移動
全てのファイルを閉じてGoogleChromePortableをTeilabPythonに移動します。
上記の方法でも移動できない場合は、閉じ忘れのファイルがあります。もしも見つからない場合は、PCを再起動してください。
【STEP.12】ChromeDriverダウンロード
URLコピー
下記からchromedriver win64の「URLをコピー」します。
https://googlechromelabs.github.io/chrome-for-testing/
ダウンロード
「①先程コピーしたURLを検索窓に貼り付けてアクセスする」と自動でダウンロードが始まりますので「②保存をクリック」します。
chromedriverのzipフォルダを展開
ダウンロードしたchromedriver-win64.zipを展開(解凍)します。
chromedriverをTeilabPythonフォルダに移動
展開したchromedriver-win64の中のchromedriver-win64をTeilabPythonに移動します。
※展開したフォルダをそのまま移動すると2重フォルダになるので注意!
chromedriver-win64 ← 避けたほうがいい
└─chromedriver-win64 ← このフォルダを移動した方がいい
chromedriver.exe
LICENSE.chromedriver
配置する階層を深くするとbugが発生しやすくなります。
それと、zipを解凍した時に2重フォルダになるのは、作成者のzip圧縮方法によって変わります。そのため解凍するまで分かりません。
もう少し詳しく知りたい方はこちら
参考
zipファイル作成でフォルダが2重、入れ子状態で圧縮されてしまう時の対処あんもちブログ
【STEP.13】不要なファイル削除
容量が大きくても問題ない場合は、省略しても大丈夫です。
- GoogleChromePortable:Data
- python-3.11.5.amd64:__pycache__
- VSCode-win32-x64-〇〇:user-data内のsettings.json以外
削除するファイルは、全て起動時に自動生成されるため動作に影響はありません。
削除方法や場所の詳細は、以下を参考にしてみてください。
ノーノちゃん
テイくん
4. よくある質問
作成時
# --------------------------------------------------
# ライブラリ(ソフト)のインポート
# --------------------------------------------------
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from time import sleep
# --------------------------------------------------
# Google Chromeの初期設定
# --------------------------------------------------
options = Options()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
options.add_argument('--ignore-certificate-errors')
options.binary_location = "GoogleChromePortable\App\Chrome-bin\chrome.exe"
driver = webdriver.Chrome(service=Service("chromedriver-win64\chromedriver.exe"), options=options)
# --------------------------------------------------
# Google Chromeの自動操作開始
# --------------------------------------------------
driver.get("https://www.google.com/")
sleep(3)
driver.find_element(By.NAME, "q").send_keys("テイラボ")
sleep(3)
driver.find_element(By.NAME, "q").send_keys(Keys.ENTER)
sleep(3)
driver.quit()
上記は、初心者向け基礎講座の【TeilabPython】Seleniumでブラウザ自動化!初期設定なし!【PART.1】の起動テスト用のコードです。
TeilabPythonをダウロードすれば「sample_selenium.py」が同梱されています。
Message: session not created: This version of ChromeDriver only supports Chrome version 117
Current browser version is 120.0.6099.200 with binary path GoogleChromePortable\App\Chrome-bin\chrome.exe
chromeがversion 117で、chromedriverがversion 120.0.6099.200のためバージョンが一致せずエラー発生しています。
そのため、どちらかのバージョンに合わす必要があります。
- chrome:120.0.6089.217
- chromedriver:120.0.6099.200
例えば上記のような場合でも動作します。基本的に一番左端(120)のメジャーバージョンが一致すれば大丈夫です。
そのためgithubから直接ダウロードする必要があります。
例えば119バージョンの場合は、jsonファイルからバージョン119のchromedriverのリンクを探します。
それと、以下のフォルダはSeleniumを動かすために入れていますので、削除しても問題ありません。
- chromedriver-win64
- GoogleChromePortable
配布時
例えば、sample.pyを起動する場合は、以下のコードになります。
@echo off
cd /d %~dp0
python-3.11.5.amd64\python.exe sample.py
Set WshShell = CreateObject("WScript.Shell")
currentDirectory = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\") - 1)
WshShell.CurrentDirectory = currentDirectory
WshShell.Run "python-3.11.5.amd64\python.exe sample.py", 0, True
batファイルはcmd画面が表示されるため、vbsファイルがおすすめです。
5. まとめ
使用するライブラリや拡張機能などは、ご自分の環境に合わせて自由にインストール可能です。
ただ、入れ過ぎると容量が大きくなり、zipで配布が難しくなるので注意しましょう。
※特に低スペックのPCでは解凍できない場合があり。
- インストール不要なため配布後の設定がいらない
- VScode内でpipコマンド使用可能
- 現在の環境に影響をあたえない
- プログラミングの練習用に配布できる
うまく作成できなかった方は、完成済みのTeilabPythonをカスタマイズしてみましょう。
【TeilabPython】Seleniumでブラウザ自動化!初期設定なし!【PART.1】