Reputation: 15
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
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