

TkinterとSeleniumを使ったアプリケーションで，スタートを押すとChromeが起動し，スタートを押すと  
`input('>何かを入力すると，コンソールにp要素のテキストを表示')`  
が動作し，コンソールでエンターキーなりを押すまでp要素の取得を待ちます．  
次に  
`input('>何かを入力すると，コンソールにh2要素のテキストを表示')`  
が動作し，同じくh2要素の取得を待ちます．

このような動作の「コンソールでエンターキーなりを押す」を「次へボタンを押す」に対応させて，次へボタンを押すまで次の処理を待つといった処理を行いたいのですが，どのように実装すればよいでしょうか．

処理を止めたい理由は，出力を一つずつ，目視で確認した後に，次の処理へ進むようにしたいためです．

現状，next()は何も行いませんが，本来は次へボタンを押すとnext()が動作し，次の処理へ進めればと思っています．

処理１  
next()が実行されるまで待つ  
処理2  
next()が実行されるまで待つ  
処理3  
︙

ご教示くださいませ．

[![画像の説明をここに入力](https://i.stack.imgur.com/cykV7.jpg)](https://i.stack.imgur.com/cykV7.jpg)

[code]

    import time
    import ctypes
    import tkinter as tk
    import tkinter.ttk as ttk
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.service import Service
    from webdriver_manager.chrome import ChromeDriverManager
    
    try:
        ctypes.windll.shcore.SetProcessDpiAwareness(True)
    except BaseException:
        pass
    
    
    def next():
        pass
    
    
    def start():
        driver = webdriver.Chrome(
            service=Service(ChromeDriverManager().install()),
        )
        driver.get('https://scrape-b276b.web.app/')
        input('>何かを入力すると，コンソールにp要素のテキストを表示')
        print(driver.find_element(By.CSS_SELECTOR, '#app > div > main > div > div > div > div > section > div.text > p').text)
        input('>何かを入力すると，コンソールにh2要素のテキストを表示')
        print(driver.find_element(By.CSS_SELECTOR, 'h2').text)
        input('>何かを入力すると，終了')
    
    
    def main():
        frame = tk.Tk()
        frame.title('title')
        frame.geometry("230x60+400+440")
    
        button1 = ttk.Button(frame, text='次へ', command=next)
        button1.place(x=10, y=10, width=100)
        button2 = ttk.Button(frame, text='スタート', command=start)
        button2.place(x=120, y=10, width=100)
    
        frame.mainloop()
    
    
    if __name__ == '__main__':
        main()
    
    
[/code]


CC BY-SA 4.0
2022-10-11T14:42:43.020
91551
2022-10-14T06:53:26.813
2022-10-14T03:15:06.090
question
python selenium tkinter
Tkinterにて，ボタンが押されるまで次の処理を待機する方法を教えてください．


[XY問題](https://ja.meta.stackoverflow.com/q/2701)ですね。

おそらく「スタート」ボタンの処理が終了すると`webdriver.Chrome(...)`で開始したブラウザのウインドウが終了してしまう状況を止めてウインドウを表示したままにしたいのだと思われます。

その原因は`def start():`関数の中で`driver`オブジェクトを作成していることです。

関数の中で作成したオブジェクトはローカル変数の扱いになり、グローバル変数に代入するとかしなければ、関数が終了すれば破棄されます。  
あらかじめ`def start():`関数の外で`driver`オブジェクトを作成しておけば待機する処理などは不要で問題は解決するでしょう。

以下のようにしてみてください。関連する部分だけを抜き出して記述します。  
next()の呼び出し確認

[code]

    def next():
        print('next()呼び出しの確認。')
    
[/code]

start()のサイト表示処理(input()等は削除しておく)

[code]

    def start():
        driver.get('https://scrape-b276b.web.app/')
        print('start()呼び出しの確認。')
    
[/code]

あらかじめdriverオブジェクトを作成しておく

[code]

    if __name__ == '__main__':
        driver = webdriver.Chrome(
            service=Service(ChromeDriverManager().install()),
        )
        main()
        driver.close()
    
[/code]


CC BY-SA 4.0
2022-10-14T03:56:50.417
91588
2022-10-14T06:53:26.813
2022-10-14T06:53:26.813
26370
26370
91551
answer