首页 > 解决方案 > 在不启动 webdriver 的情况下设置 python selenium webdriver

问题描述

我需要找到一种方法来仅根据需要并使用“开始”按钮来启动 selenium webdriver。当我这样做并启动 web_test 函数时,我得到错误:'name 'web_driver' is not defined'。

我只能在 webdriver 在启动时启动它(web_driver = webdriver.Edge('msedgedriver.exe')以下示例中的第 6 行)。

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()

标签: pythonseleniumselenium-webdrivertkinter

解决方案


我需要找到一种方法来仅按需启动 selenium webdriver,并使用“开始”按钮

为此定义一个类,然后您可以简单地调用关联的方法,例如start_webdriver启动 Web 驱动程序,或者main是包含所有 tkinter 代码的方法。

您在方法内部定义的任何变量__init__都可以通过该类的其他方法访问,这将解决您未定义 Web 驱动程序的问题。

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()

推荐阅读