python - 在不启动 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()
解决方案
我需要找到一种方法来仅按需启动 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()
推荐阅读
- flutter - 带有工具提示的颤振选项卡
- python - java中的一维离散傅里叶变换(rfft)
- kubernetes - K8s 中受限用户需要 CRD 的访问权限
- flutter - 错误状态:仅在首次加载时 Flutter 中的 DocumentSnapshotPlatform 中不存在字段
- regex - Notepad ++用0替换csv中的空格
- linux - 如何更改 Linux 的部署路径?
- javascript - 根据引用的集合计算总价
- python - 脚本运行时按下空格键向下滚动
- azure-functions - 如何在 Azure Function App 中将 Azure Key Vault 提供程序与始终加密的列一起使用
- python - dtype Int64 不返回基础数据的视图?