Pythonいろいろ

python便利!

Python で Gmail を使用するための Google ( Gmail ) の設定

 

以前、以下の記事でPythonGmail でメールを送信するプログラムを紹介しました。

メールを送信するためにGoogleGmail)側の設定も必要なので、今回はその設定について記載します。

various-python.hatenablog.com

 

Google側の設定としては以下の二つを設定する必要があります。

  • 2段階認証
  • アプリパスワード

 

1.2段階認証の設定

 では、まず初めに「2段階認証」の設定をします。

 

 ①「Googleアカウントを管理」を設定する

 

 ②「セキュリティ」を選択して「2段階認証プロセス」を選択してください。

 

 ③以下のような画面が、続けて表示されるので、「使ってみる」、「続行」を選択する。

 

 ④以下の画面のとおり2段階認証を行います。

 

 ⑤「有効にする」を押下し、認証を有効化します。これで、2段階認証の設定は完了です。

 

2.アプリパスワードの生成

 次にアプリパスワードを生成します。

 ①2段階認証の設定が完了したら、もう一度「セキュリティの画面」から「2段階認証プロセス」を選択してください。

 

 ② 一番下までスクロールすると「アプリ パスワード」という項目があるので選択します。

 

 

 ③次にアプリとして「メール」、デバイスとして「Windowsパソコン」を選択して、「生成」を押します。

 

 ④最後にアプリパスワードが生成されるので、メモしておきます。このアプリパスワードをPythonでメール送信する際に、使用します。

ここまでで、Googleの設定は完了です。

以下のブログ記事のプログラムでここで生成されたアプリパスワードやメールアドレスを設定することでメールを送信することができます。

ぜひ、お試しください。

various-python.hatenablog.com

Python を使用して、 メール を 送信する Gmail コピペ 可能

Python + Gmail を使用してメールを送信する方法を記載したいと思います。

今回はGmailを使用します。Gmail側での設定も必要になってきますので、まだの方は先に以下の記事でGmailの設定を行って戻ってきてください。

various-python.hatenablog.com

ではコードを示します。以下のコードをコピペしてもらって、User_Settingの箇所を自身のものに変更してもらうことで、send_mail関数で「Hello world」という内容のメールが送信されます。

User_Settingの変数の意味は以下のとおりです。

SENDER_ADDRESS:送信元メールアドレス

SENDER_APP_PASS:上記の記事で生成したアプリパスワード

RECIPIENT_ADDRESS:送信先メールアドレス

 

「send_mail」関数の引数は以下のとおりです。

第一引数:メールの件名

第二引数:送信内容

 

今回はテストコードなので自分から自分にメールを送るコードを書いていますが、RECIPIENT_ADDRESSの値を相手先メールアドレスに変更すれば、ほかのアドレスに送信することが可能です。


from email import message
import smtplib

#######User Setting##########
SENDER_ADDRESS='abcd@gmail.com'
SENDER_APP_PASS='abcdefghijklmnop'
RECIPIENT_ADDRESS=SENDER_ADDRESS
#############################

def send_mail(title,main_message):
    smtp_host = 'smtp.gmail.com'
    smtp_port = 587
   
    msg = message.EmailMessage()
    msg.set_content(main_message);
    msg['Subject'] = title
    msg['From'] = SENDER_ADDRESS
    msg['To'] = RECIPIENT_ADDRESS
    
    server = smtplib.SMTP(smtp_host, smtp_port, timeout=60)
    server.ehlo()
    server.starttls()
    server.ehlo()
    server.login(SENDER_ADDRESS, SENDER_APP_PASS)
    server.send_message(msg)
    server.quit()
    
send_mail("test mail","hello world")

Python + Selenium を使用した コンテキストメニュー の操作方法

今回はPythonSeleniumを使用して、要素を指定してコンテキストメニューを開き、操作する方法について書きたいと思います。コンテキストメニューとは以下のように右クリックしたときに表示されるメニューです。

 

手順としては以下のとおりです。

①URLにアクセスする

②要素を指定する

③右クリックし、コンテキストメニューを表示する

④キーボード操作信号でコンテキストメニュを操作する

⑤別タブで画像のリンク先を開く

 

webdriverの機能では操作できなさそうなので、pyautoguiを使用して

キーボード入力を使用して操作しています。

ソースコードに説明を載せています。CHROME_DRIVER変数を自身の環境のものに変更すればコピペで使用できます。


from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
import pyautogui
import time

#CHROME_DRIVERには自分でダウンロードしてきたChrome Driver(実行環境のGoogle Chromeと同じバージョンのドライバーを使用する必要があります。)のパスを指定してください
CHROME_DRIVER=r"C:\Users\user\Downloads\chromedriver-win64\chromedriver-win64\chromedriver.exe"
ACCESS_URL=r"https://various-python.hatenablog.com/entry/2021/07/11/003749"


service = Service(executable_path=CHROME_DRIVER) 
driver = webdriver.Chrome(service=service)
driver.implicitly_wait(10)#要素を取得する最大待機時間
driver.get(ACCESS_URL)#ページにアクセス


#画像要素の取得
img_element=driver.find_element(By.TAG_NAME,'img')
 


#コンテキストメニューを操作
time.sleep(1)
ActionChains(driver).context_click(img_element).perform()#右クリック
time.sleep(1)
pyautogui.press("down")#キーボード入力 ↓
time.sleep(1)
pyautogui.press("down")#キーボード入力 ↓
time.sleep(1)
pyautogui.press("enter")#キーボード入力 enter

Python を使用した 画像 などの カービング 削除ファイル 復元

 

この記事では、ディスクイメージ等から特定のファイルを抽出することを目的としています。

具体的には、画像ファイルなどの削除されたファイルを抽出したりすることができます。

 

 

 

使用方法

 

1、Pythonが実行できる環境に下のコードをコピペしてください。

 

 

2、探したいファイルのヘッダーとフッターが何かを確認してください。

 探し方は、ネットで拡張子を検索するか、Stirlingなどのバイナリエディタでファイルの最初と末尾を確認してください。

 

PNGであればヘッダーが「0x89504e470d0a1a0a」、フッターが「0xae426082」

JPGであればヘッダーが「0xFFD8FF」、フッターが「0xFFD9」

 

 

3、その後、コピペしたコードの「###User Setting Parameter」の箇所を自分の環境よって変更してください。

  • FileName : 抽出元のディスクイメージファイルのパス
  • MaxFileSize : 抽出するファイルの最大ファイルサイズ
  • Header : 2で確認したファイルヘッダ
  • Footer : 2で確認したファイルフッター
  • Extension  : 抽出するファイルの拡張子

 

 補足するとファイルヘッダを見つけてからMaxFileSizeを超えてもFooterが見つからない場合は、中断して保存し、新たにHeaderを探し始めます。また、Extensionは保存するファイル名に使用するので、「.」を含めてください。

 

4、実行してください。

  実行するとデスクトップに「CurvingResult」というフォルダができそこに抽出したファイルが保存されます。

 

 

 

import os
import shutil

#png header 0x89504e470d0a1a0a
#png footer 0xae426082
#jpg header 0xFFD8FF
#jpg footer 0xFFD9

###User Setting Parameter
FileName=r""
MaxFileSize =1000000
Header=0x89504e470d0a1a0a
Footer=0xae426082
Extension = ".png"
###

###Create Destination Directory
try:
    sDestDir = os.path.expanduser("~\\Desktop\\CurvingResult\\")
    os.mkdir(sDestDir)
except :
    shutil.rmtree(sDestDir)
    os.mkdir(sDestDir)
###

#Read Source File
with open(FileName,"rb") as ioSrcFile:
    iHeaderLen=int((len(hex(Header))-2)/2)
    iFooterLen=int((len(hex(Footer)) - 2) / 2)

    ###initialize variables
    bHeader=(Header).to_bytes(iHeaderLen,"big")
    bFooter = (Footer).to_bytes(iFooterLen, "big")
    sFile=ioSrcFile.read()
    iDstLen=0
    bDst=bytes()
    ###


    ###Search header and footer
    for n in range(0,len(sFile)):


        if sFile[n:n+iHeaderLen]==bHeader:
            print("discover header")
            bDst=bytes()
            iDstLen=1
            bDst += sFile[n].to_bytes(1, "big")
            continue
        if iDstLen:
            iDstLen+=1;
            bDst+=sFile[n].to_bytes(1,"big")
        if (sFile[n:n+iFooterLen]==bFooter and iDstLen>iHeaderLen)or len(bDst)>=MaxFileSize:
            print("discover footer")
            iDstLen=0
            bDst+=sFile[n+1:n+iFooterLen]

            #Save Curving File
            with open(sDestDir+"file-"+str(n)+Extension,"wb") as ioDstFile:
                ioDstFile.write(bDst)
                bDst = bytes()
                print("Save File\n")
    ###
print("Finish Curving")

 

にほんブログ村 IT技術ブログへ
にほんブログ村

 

Python ラジオボタン の作成 種類ごとに枠線を表示 (tkinter)

今回はラジオボタンを作成したいと思います。そして、ラジオボタンを種類ごとに枠(罫線?)で囲みます。

 

以下の記事のテンプレにラジオボタンを追加したものになります。

 

 

various-python.hatenablog.com

 

今回の記事を読むと以下のような画面が作成できます。

 

f:id:chacha07:20210815202254p:plain

 

 

とりあえず、ソースコードを示します。

 

説明はソースコードの下に書きます!

 


# -*- coding: utf-8 -*-

import tkinter
from tkinter import messagebox
import sys
import os


def main_proc():
    global root
    
    #Retreive InputForm Data
    textdata=txt.get("1.0","end")
    

    #None Data 
    if  len(textdata)==1:
        messagebox.showinfo("Invalid Data", "入力してください。")
        return
    
    #Get Radio Button Value
    radiobt = rad_val.get()
    radiobt2 = rad_val2.get()
    
    flag=radiobt+radiobt2
    
    #Change your processing
    messagebox.showinfo("title", textdata+"\n"+"radio flag = "+str(flag))
    
    
    
    
    root.destroy()
    sys.exit()

def temp_path(relative_path):
    try:
        #Retrieve Temp Path
        base_path = sys._MEIPASS
    except Exception:
        #Retrieve Current Path Then Error 
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)


#logo=temp_path('test_icon.ico')
root=tkinter.Tk()

#Display Size
root.geometry('490x280')

#Title Bar
root.title('test')

#Icon
#root.iconbitmap(default=logo)

#Label
lb=tkinter.Label(root,text="入力してください。")
lb.pack(pady=10)
lb.place(x=30,y=10)

#InputForm
txt=tkinter.Text(root,width=30,height=10)
txt.pack(padx=10,pady=10)
txt.place(x=30,y=60)

#Exec Button
btn=tkinter.Button(root,height=1,width=10,text="検索",command=main_proc)
btn.pack(padx=10,pady=10)
btn.place(x=200,y=220)


#Label Frame
frame = tkinter.LabelFrame(root,text="ラベルフレーム1",relief="ridge",bd=2)
frame.pack(pady=10)
frame.place(x=300,y=10)



#Radio Button
rad_val = tkinter.IntVar()
rad_val.set(False)

rd = tkinter.Radiobutton(frame, variable=rad_val, value = 10,text="A")
rd.pack(anchor=tkinter.W)

rd2 = tkinter.Radiobutton(frame, variable=rad_val, value = 20,text="B")
rd2.pack(anchor=tkinter.W)

rad_val.set(10)#default value



#Label Frame2
frame2 = tkinter.LabelFrame(root,text="ラベルフレーム2",relief="ridge",bd=2)
frame2.pack(pady=10)
frame2.place(x=300,y=100)



#Radio Button2
rad_val2 = tkinter.IntVar()
rad_val2.set(False)

rad = tkinter.Radiobutton(frame2, variable=rad_val2, value = 1,text="1")
rad.grid(row=1, column=1,padx=5, pady=5)

rad2 = tkinter.Radiobutton(frame2, variable=rad_val2, value = 2,text="2")
rad2.grid(row=1, column=2,padx=5, pady=5)

rad3 = tkinter.Radiobutton(frame2, variable=rad_val2, value = 3,text="3")
rad3.grid(row=2, column=1,padx=5, pady=5)

rad4 = tkinter.Radiobutton(frame2, variable=rad_val2, value = 4,text="4")
rad4.grid(row=2, column=2,padx=5, pady=5)

rad_val2.set(2)#default value


root.mainloop()
root.quit()

 

ではソースコードの説明をします。 

 

ボタンを囲う枠の作成

まず、tkinter.LabelFrameでルートウィンドにラベルフレームの作成(#Label Frameのところ)を行っています。

 

ラベルフレームというのは、ラジオボタンを囲っている枠(罫線)です。

 

そして、frame.pack,placeで枠線周りの余白及び枠線のルートウィンドへの設置位置を指定しています。

 

ラジオボタンの作成

tkinter.Radiobuttonでラジオボタンを作成するのですがその前に、tkinter.IntVarでラジオボタンで指定した値を受け取るための変数(rad_val)を作成します。

その後、先ほど作成した、ラベルフレームtkinter.Radiobuttonでラジオボタンを作成します。引数は以下のとおりです。

 

第一引数 : 作成したラベルフレーム 

variable : kinter.IntVarで作成した変数(rad_val)指定

value : このラジオボタンを選択したときにrad_valに格納される値

text : ラジオボタンに表示されるテキスト

 

 作成するラジオボタンの数だけtkinter.Radiobuttonを記入。複数のラジオボタンを同じグループにしたいときはvariable引数に同じ変数を指定しましょう。

また、第一引数に指定したラベルフレームの場所にラジオボタンが表示されますので、注意しましょう。

 

ラジオボタンの値の取得

radiobt = rad_val.get()
radiobt2 = rad_val2.get()

上の二行でラジオボタンの値を取得することで、どのボタンが選ばれたかを取得しています。

 

 補足

今回はアイコンを用意してないので、「root.iconbitmap(default=logo)」のところを「#」でコメントアウトしています。なので、temp_path関数は消してもらって構いません。

temp_path関数については以下の記事をご覧ください。

 

various-python.hatenablog.com

 

 

にほんブログ村 IT技術ブログへ
にほんブログ村

 

Python アイコンファイル (.ico) の 作り方

アイコンファイルの作成の仕方についてです。とくにpythonで何かするわけではありませんが、pythonで作成したexeにアイコンを付けたいい場合に便利なのでメモします。

 

 

pythonのpyinstallerで作成した「exe」に、「--icon」オプションでアイコンを指定したが、うまくいかない方、試してみてもいいかもしれません。

 

今回は、アイコンウィザードというものを使用します。

 

準備として、アイコンに使用したい画像(jpg又はpng)を用意します。

 

次に以下のリンクから「アイコンウィザード」を、ダウンロードして、インストールしてください。

アイコン ウィザードの詳細情報 : Vector ソフトを探す!

 

 

 

インストールが完了すると以下のようなアイコンがデスクトップに作成されます。

 

f:id:chacha07:20210711090710p:plain

 

これをダブルクリックで起動します。

起動したら、アイコンに使用したい画像(jpg又はpng)をドラッグアンドドロップします。

すると、以下の画面のように読み込まれます。

1、画像を開く

f:id:chacha07:20210711090838p:plain

この時、画像の背景を透明にしたい場合は、「背景色(C):」にチェックを入れておいてください。必要に応じて設定を変更し、「次へ」を押します。

 

 

2 透過領域の指定

f:id:chacha07:20210711091550p:plain

画像の背景を透明にしたい場合、背景をクリックすると透明になります。何もしない場合は次へを押してください。

 

3、画像の加工

f:id:chacha07:20210711091840p:plain

ここは好みで設定してください。何もしない場合は、そのまま「次へ」を押してください。

 

4、画像フォーマットの指定

f:id:chacha07:20210711092030p:plain

ここでの設定が、pythonに使用する際のエラーに関わってくることがあります。何も考えずにすべてにチェックを入れましょう。チェックを入れ終えたら「次へ」を押してください。

 

 

5 保存場所の指定

f:id:chacha07:20210711092707p:plain

最後に保存ファイル名を指定して、「完了」ボタンを押せば、アイコンファイル(.ico)が作成されます。

 

 

にほんブログ村 IT技術ブログへ
にほんブログ村

python で GUI を作るときの テンプレ ート( tkinter 使用)

 

今回の記事は、PythonGUIを作るとき、tkinterでいちいちプログラムを書くのがめんどくさいというところで、テンプレートを作成してみました。

 

 

 

ユーザーに入力してもらってそれに対する処理をするというときは、アイコンの準備とこれのMessageboxの部分(黄色で強調箇所)を必要な処理に変更すればいいだけです。

 

ちなみにこんな画面が表示されます。

f:id:chacha07:20210711090008p:plain

 

 

 

 では、こちらがテンプレートです。

アイコンを用意せずにとりあえず実行してみたいという方は「root.iconbitmap(default=logo)」のところを「#」でコメントアウトしてください。

import tkinter
from tkinter import messagebox
import sys
import os


def main_proc():
    global root
    
    #Retreive InputForm Data
    textdata=txt.get("1.0","end")
    
    #None Data 
    if  len(textdata)==1:
        messagebox.showinfo("Invalid Data", "入力してください。")
        return
    
    #Change your processing
    messagebox.showinfo("title", textdata)
    
    root.destroy()
    sys.exit()

def temp_path(relative_path):
    try:
        #Retrieve Temp Path
        base_path = sys._MEIPASS
    except Exception:
        #Retrieve Current Path Then Error 
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)


logo=temp_path('test_icon.ico')
root=tkinter.Tk()

#Display Size
root.geometry('300x300')

#Title Bar
root.title('test')

#Icon
root.iconbitmap(default=logo)

#Label
lb=tkinter.Label(root,text="入力してください。")
lb.pack(pady=20)

#InputForm
txt=tkinter.Text(root,width=30,height=10)
txt.pack(padx=10,pady=10)

#Exec Button
btn=tkinter.Button(root,height=1,width=10,text="検索",command=main_proc)
btn.pack(padx=10,pady=10)

root.mainloop()
root.quit()

 

アイコンの作成の仕方は以下の記事をご覧ください。

various-python.hatenablog.com

 

 

temp_path関数については、アイコンのための処理です。気になる方は以下の記事を確認ください。

various-python.hatenablog.com

 

にほんブログ村 IT技術ブログへ
にほんブログ村