ZOUHAIRI Fouad
ZOUHAIRI Fouad

Reputation: 15

set python selenium webdriver without starting the webdriver

I need to find a way to start the selenium webdriver only on demand and with the button 'Start'. when I do so and I launch the web_test function, I get the Error : 'name 'web_driver' is not defined'.

I can only make it work when the webdriver is launched at start(web_driver = webdriver.Edge('msedgedriver.exe') line 6 in the following exemple).

from tkinter import *
from selenium import webdriver
from selenium.webdriver.common.keys import Keys


##web_driver = webdriver.Edge('msedgedriver.exe')

def start_webdriver():
    web_driver = webdriver.Edge('msedgedriver.exe')

def stop_webdriver():
    web_driver.quit()

def web_test():
    web_driver.get('https://stackoverflow.com/')
    web_driver.find_element_by_name('q').send_keys('python selenium')
    web_driver.find_element_by_name('q').send_keys(Keys.ENTER)
    

CanvasWd = 500
CanvasHg = 300

root = Tk()
root.title("app")
root.geometry(f"{CanvasWd}x{CanvasHg}")


canvas0 = Canvas(root,highlightthickness=0,width=CanvasWd,height=CanvasHg)

web_start_btn = Button(root,text='Start',command=start_webdriver)

web_stop_btn = Button(canvas0,text='Stop',command=stop_webdriver)

web_test_btn = Button(canvas0,text='testing',command=web_test)


canvas0.create_window(30, 10, anchor=NW, window=web_start_btn)
canvas0.create_window(10, 45, anchor=NW, window=web_stop_btn)
canvas0.create_window(90, 45, anchor=NW, window=web_test_btn)

canvas0.grid(row=1, column=1)

root.mainloop()

Upvotes: 0

Views: 109

Answers (1)

user9321739
user9321739

Reputation:

I need to find a way to start the selenium webdriver only on demand and with the button 'Start'

To do this define a class, then you can simply call the associated method, such as start_webdriver to start the web driver, or main which is a method that contains all of the tkinter code.

any variable you define inside of the __init__ method can be accessed by other methods of the class, which would fix the issue you where having the web driver is not defined.

from tkinter import *
from selenium import webdriver
from selenium.webdriver.common.keys import Keys


##web_driver = webdriver.Edge('msedgedriver.exe')

class driver():
    def __init__(self):
        self.CanvasWd = 500
        self.CanvasHg = 300
        self.root = Tk()
        self.root.title("app")
        self.root.geometry(f"{self.CanvasWd}x{self.CanvasHg}")
    
    def start_webdriver(self):
        self.web_driver = webdriver.Edge('msedgedriver.exe')

    def stop_webdriver(self):
        self.web_driver.quit()

    def web_test(self):
        self.web_driver.get('https://stackoverflow.com/')
        self.web_driver.find_element_by_name('q').send_keys('python selenium')
        self.web_driver.find_element_by_name('q').send_keys(Keys.ENTER)

    def main(self):
        canvas0 = Canvas(self.root,highlightthickness=0,width=self.CanvasWd,height=self.CanvasHg)

        self.web_start_btn = Button(self.root,text='Start',command=self.start_webdriver)

        self.web_stop_btn = Button(canvas0,text='Stop',command=self.stop_webdriver)

        self.web_test_btn = Button(canvas0,text='testing',command=self.web_test)


        canvas0.create_window(30, 10, anchor=NW, window=self.web_start_btn)
        canvas0.create_window(10, 45, anchor=NW, window=self.web_stop_btn)
        canvas0.create_window(90, 45, anchor=NW, window=self.web_test_btn)

        canvas0.grid(row=1, column=1)

        self.root.mainloop()

d = driver()
d.main()

Upvotes: 1

Related Questions