Yi3112Yi3112
@Yi3112Yi3112

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

[selenium] 取得したテキストボックスの値をChromeに渡したい

Python初心者です。
以下のことをしたいのですがつまづいているので教えていただきたいです。
 ①yyyy/mm/ddを入力するウインドウを表示(テキストボックス設置)
 ②日付入力して作成ボタンを押したら、指定URLがChromeで開いて自動ログイン。
 ③対象ページまで進み、その中に日付入力項目があるので、そこに②で入力された日付を入れる
 ④入れたら次のアクションに進む。
この②から③の日付の受け渡しが全くわかりません。
※①と②③はそれぞれ単体で作ってみたのですが・・・

▼日付入力用のウインドウ表示

#ライブラリのインポート
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import tkinter as tk

#年月日入力用の小画面のクラス
class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master.geometry("300x150+50+50")
        self.master.title("メニュー")
        #フレームの作成
        self.frame1 = tk.Frame(self.master, width=300, height=120, padx=20, pady=10)
        self.frame1.grid_propagate(False)
        self.frame1.place(x=10, y=10)
        self.frame2 = tk.Frame(self.master, width=300, height=120, padx=20, pady=10)
        self.frame2.grid_propagate(False)
        self.frame2.place(x=10, y=70)
        self.frame3 = tk.Frame(self.master, width=150, height=100, padx=15, pady=10)
        self.frame3.grid_propagate(False)
        self.frame3.place(x=185, y=87)
        #ウィジェット作成の呼び出し
        self.create_widgets()

    #ウィジェット作成   
    def create_widgets(self): 
        #開始年月日
        self.label1 = tk.Label(self.frame1, text="開始年月日 (例:2023.01.01)")
        self.label1.grid(row=0, column=0, sticky=tk.W)
        self.entry1 = tk.Entry(self.frame1, width=20)
        self.entry1.grid(row=1, column=0, sticky=tk.W)

        #終了日年月日
        self.label2 = tk.Label(self.frame2, text="終了年月日 (例:2023.01.01)")
        self.label2.grid(row=0, column=0, sticky=tk.W)
        self.entry2 = tk.Entry(self.frame2, width=20)
        self.entry2.grid(row=1, column=0, sticky=tk.W)
        self.button = tk.Button(self.frame3, text="作成",width=7)
        self.button.grid(row=0, column=0)
        self.text = tk.StringVar()

    #クリック    
    def Button_click(self, event):
        en_get = self.entry1.get()
        self.entry2.delete("0", "end")
        self.entry2.insert(0, str(en_get))
        self.text.set(en_get)
        
def main():
    root = tk.Tk()
    root.resizable(width=False, height=False)
    app = Application(master=root)
    app.mainloop()

if __name__ == "__main__":
    main()

▼Chromeでログイン画面を開いて対象画面まで進む

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import tkinter as tk

#URLを指定
Url = "https://www.XXXXXXXXXX/login"

#Chromeでログイン画面を開いて対象画面まで進む
Driver = webdriver.Chrome(executable_path=r'C:\Users\XXX\PythonWorks\ChromeDriver\chromedriver.exe')
Driver.get(Url)

#メールアドレスとパスワードを入力
Driver.find_element(By.ID,"email").send_keys("XXXX@XXXXX")
Driver.find_element(By.ID,"password").send_keys("XXXXXX")

#ログインボタン押下(画面表示されるまで待機)
login_button = Driver.find_element(XXXXXXXXXXXXX)
login_button.click()
Wait  = WebDriverWait(Driver,30)
Element = Wait.until(EC.element_to_be_clickable((By.XPATH,XXXXXXXXXXXXX)))

#詳細設定(Advanced_settings)を押下
Advanced_settings = Driver.find_element(By.XPATH,XXXXXXXXXXXXX)
Advanced_settings.click()
time.sleep(5)

以上です。
ググってもググっても解決に至らなかったので、お力を貸してください。
よろしくお願いいたします。

0

1Answer

【作成】ボタンが機能してないので tk.Button() に引数 command を追加

- self.button = tk.Button(self.frame3, text="作成",width=7)
+ self.button = tk.Button(self.frame3, text="作成", width=7, command=self.Button_click)

Button_click() の引数 event を削除
en_get をグローバル変数にして日付を取得。特に制約とかないなら一番楽
ウィンドウ閉じて次の処理に進むため .destroy() を追加

#クリック
- def Button_click(self, event):
+ def Button_click(self):
+     global en_get
      en_get = self.entry1.get()
      self.entry2.delete("0", "end")
      self.entry2.insert(0, str(en_get))
      self.text.set(en_get)
+     self.master.destroy()

グローバル変数 en_get を webdriverに渡すことで表題の問題は解決できると思います

driver.find_element(By.XX, YYY).send_keys(en_get)
2Like

Comments

  1. @Yi3112Yi3112

    Questioner

    うまくいきました!助かりました!ありがとうございました。

Your answer might help someone💌