プロが教えるわが家の防犯対策術!

現在、Pythonを使用し下記コードを実行しているのですが、Pythonで実行をすると正しく動くのですが、exe化するとはじめの1回目が正しく動作しません。おそらくchromeのwebドライバーのダウンロードの部分の動作がちゃんと出来ていないのではないかと思いますが、exe化した時にも1回目から動くようにするにはどのようなコードに書き直せばよろしいでしょうか?

ど素人ながらの予測では、Pythonだと自動で現在の自分のPCにインストールされているchromeにあったwebドライバーがインストールされ、コードが正しく動作している。
exe化すると、その部分が正しく動作していない、と予想しております。
Pythonで一度実行してから、再度exeの方を実行すると動作する。
ご教示願います(コードは一部隠しております。)

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from webdriver_manager.chrome import ChromeDriverManager
from time import sleep
import subprocess
import os
import shutil
import glob

browser = webdriver.Chrome(ChromeDriverManager().install())
browser.implicitly_wait(10)
url = "【隠しております】"
browser.get(url)

browser.implicitly_wait(20)

overview = browser.find_element_by_id("SelDep")
select = Select(overview)
select.select_by_index(5)
sleep(0.5)

overview = browser.find_element_by_id("SelOgnzDV")
select = Select(overview)
select.select_by_index(1)
sleep(0.5)

overview = browser.find_element_by_id("SelOgnzCD")
overview.send_keys("711:FL")
sleep(0.5)

overview = browser.find_element_by_id("btn_ver3")
overview.click()

browser.implicitly_wait(20)

overview = browser.find_element_by_name("submitbutton")
overview.click()
sleep(2)
browser.quit()

path = r"【隠しております】"
subprocess.Popen(['explorer', path], shell=True)


list_of_files = glob.glob('【隠しております】')
latest_file = max(list_of_files, key=os.path.getctime)

shutil.copyfile(latest_file, "【隠しております】")

A 回答 (1件)

質問にはexe化をどんなソフトでやっているか書かれてないですが、主流のPyInstallerですかね。

あれの作るexeってpython実行環境とスクリプトをまとめてアーカイブしたもので、実行時にはテンポラリに展開して、そこでスクリプトが動くという作りだったと思います。__file__でスクリプトのパスを得ようとしても正しく動かないとか。
一方でwebドライバはスクリプトと同じフォルダにダウンロードされると思うので、1回目だけ上手く動かないのだとダウンロードしたファイルがpythonから見えるのに遅延があるか、python.exeを立ち上げ直さないと見えないとか。
webドライバのダウンロード先を制御できるなら外部の固定的なパスにしてそこを参照するとか。どこにするのか難しいですけど。

なお正しく動作しないの具体的な内容を書くともう少し回答の反応が良いかもしれません。例外が発生するようならその内容を。それとも正常に終了するけど結果が得られないのかな。
    • good
    • 0
この回答へのお礼

まずはお礼が大変遅くなり申し訳ございません。
またこのようなわかり辛いご質問にご回答頂きありがとうございます。

結局は自分のコードが原因でした。
お騒がせ致しました。

お礼日時:2023/07/28 17:07

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