Anaconda Promptをバッチファイル化する
はじめに
Anaconda Promptのコマンドから、手動でAnaconda仮想環境を起動するのは大変です。
そのような場合はbatファイル化するといよいでしょう。
anaconda promptは、activate.batというバッチファイルから起動が可能です。
インストール階層(通常C:\Users\ユーザー\Anaconda\)のScripts\activate.bat
に存在しています。
これをコマンドプロンプトにて、以下のように起動できます
`call C:\Users\ユーザー\Anaconda\Scripts\activate.bat{ ※ユーザーは任意の階層
call C:\\Users\\ユーザー\\Anaconda\\Scripts\\activate.bat call conda -V call activate Test cd Test_Folder_Path call pyinstaller test.py --clean -F xcopy /Y /Q /S /E dist\*.* ..\..\bin call exit
参考リンク
- バッチからanaconda環境を実行
beautifulsoup4でスクレイピング
はじめに
beautifulsoup4でスクレイピングを行います。
インストールコマンド
参考リンク
Python Webスクレイピング テクニック集「取得できない値は無い」JavaScript対応@追記あり6/12 - Qiita
WPF開発復習
WPF開発復習
WPF開発技術を復習します。(かなり忘れているため・・・)
参考サイト
以下が体系的にまとめられていていそうです
MVVMな設計のTips~サービスを作ってVMの依存性を排除~
jupyter Notebookのコードをexe化する方法 [Anaconda3環境]
jupyter Notebookのコードをexe化する方法 [Anaconda3環境]
jupyter Notebookのコードをexe化する方法を記録します。
手順
- まず、Jupyter Notebookを開き、以下のイメージのように、メニューのFile⇒Downlaod as ⇒ Python (.py)を選択してください。
次に、Anaconda Promptから、
conda install pyinstaller
を実行して、pyinstallerパッケージをインストールします。pyinstaller 実行したいPythonファイル --clean -F
2つあるオプションは以下の目的で付けています。
--clean
: 前回ファイル削除
-F
: 実行時に必要なファイルが1つのexeファイルに集約される
[例]
pyinstaller Google_Search_Using_XPath.py --clean -F
作成されたexeファイルは、exe
ファイルはpyinstaller
を実行したカレントディレクトリに生成されるdist
フォルダ内に出力されます。
注意点
なお、chromedriver.exe
ファイルを使用する場合は、作成したexeファイルから参照可能なパスである必要があります。同じ階層に置くとよいでしょう。
参考ページ
あとがき
比較的簡単にexe化を実行することができました。
なお、pyinstaller
によって作成されたexeファイルを実行するとコンソールが表示されます。これを消去するのはPythonでは難しそうです。C#なら可能のようです。
python - HeadlessモードでChromeDriverを起動したときにコンソールが表示されないようにする - スタック・オーバーフロー
リンク
Python + Selenium + ChromeでGoogleの検索を自動化する [非headlessモード][XPath]
はじめに
本記事は、Python + Selenium + ChromeでGoogleの検索を自動化する手法について記載したものです。
今回は、XPathを使用して、検索を行います。
XPathとは
XPathはXML文章中の要素、属性値などを指定するための言語です。 XPathではXML文章をツリーとして捉えることで、要素や属性の位置を指定することができます。 HTMLもXMLの一種とみなすことができるため、XPathを使ってHTML文章中の要素を指定することができます。
- クローラ作成に必須!XPATHの記法まとめ
(※記事記載時点(2019/10/17)では本記事のコードが動作することを確認していますが、Googleのデザイン等が変われば動作しなくなる可能性があります。ご了承ください)
環境
環境は以下のとおりです。パッケージの管理はAnacondaで実施しています。pythonコードの実行はjupyter Noteboook
を使用しております。
- OS : Windows 10 Pro
- conda version : 4.7.12
- conda-build version : 3.18.9
- python version : 3.7.4.final.0
- selenium : 3.141.0
- ChromeDriver : 77.0.3865.40
XPathを用いた検索方法
XPathを用いた検索方法は、以下の記事で分かりやすく説明してあります。
本記事のサンプルコードでは、Full XPath(
絶対XPathパス)を用いてWebページの要素を取得しています。
XPathを用いれば、以下のように、要素にID指定やclass名指定がなくても、テストしたいページのタグ構成から要素を掴むことが可能です。
element = driver.find_element_by_xpath("/html/body/form[1]")
XPathを用いて、要素を操作する処理は何度も繰り返すと思いますので、関数化するとよいと思います。
# XPathを用いて、ボタンをクリックする def click_button_using_XPath(element_XPath : str): element = WebDriverWait(driver, MAX_WAIT_TIME_SEC).until( EC.presence_of_element_located((By.XPATH, element_XPath)) ) element.click() return element
サンプルコード
Googleの検索を自動化したコードです。検索文字列を入力してEnterキーを押した後、ニュースボタンを押します。
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys MAX_WAIT_TIME_SEC = 100 # ChromeDriverのパスを引数に指定しChromeを起動 CHROME_DRIVER_PATH = "chromedriver.exe" options = Options() driver = webdriver.Chrome(executable_path=CHROME_DRIVER_PATH, options=options) driver.maximize_window() # 画面表示を最大化する # 指定したURLに遷移する web_site = 'https://www.google.com/' driver.get(web_site ) # XPathを用いて、ボタンをクリックする def click_button_using_XPath(element_XPath : str): element = WebDriverWait(driver, MAX_WAIT_TIME_SEC).until( EC.presence_of_element_located((By.XPATH, element_XPath)) ) element.click() return element # XPathを用いて、テキストボックスに文字列を入力する def input_textbox_using_XPath(element_XPath : str, send_code : str): element = WebDriverWait(driver, MAX_WAIT_TIME_SEC).until( EC.presence_of_element_located((By.XPATH, element_XPath)) ) # 検索テキストボックスをクリアする for item in range(0,100) : element.send_keys(Keys.BACK_SPACE) element.send_keys(send_code) return element # テキストボックスに検索ワードを入力して、直後にEnterキーを押す input_textbox_using_XPath("/html/body/div/div[4]/form/div[2]/div[1]/div[1]/div/div[2]/input", "test").send_keys(Keys.RETURN) # ニュースボタンを押す click_button_using_XPath("/html/body/div[7]/div[3]/div[5]/div/div/div[1]/div/div/div[1]/div/div[2]/a") driver.close() # ウィンドウを閉じることが出来ます。閉じることが出来るのは引数にブラウザのバイナリを指定したインスタンスウインドウのみ driver.quit() # 「quit」を実行することで全てのウィンドウを閉じることが出来ます。