如何使用Selenium在Tkinter GUI中显示HTML表格数据单元格元素?

2024-09-29 23:17:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想制作一个程序,从批发网站获取表格的表格数据单元格元素(表格显示一次性VAPE的库存),然后在Tkinter GUI上显示哪些项目库存不足。到目前为止,我正在使用selenium访问各种VAPE的不同URL,并根据它们是否低于某个数字打印出这些VAPE的某些口味的库存。我添加了一个Tkinter GUI,它询问您想要检查哪些股票,并在按下“Vapes”按钮时启动selenium。是否可以在Tkinter GUI上显示HTML数据,而不只是将其打印到终端?这是我到目前为止的代码,我计划添加更多的VAPE和其他项目,但这里只添加了两个,这样看起来就不会那么混乱了:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from tkinter import *
import time
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
def search_result():
    # fume infinity
    driver.get("https://safagoods.com/vape-shop/disposable-vape-devices/fume-infinity-disposable-device")
    wait = WebDriverWait(driver, 15)
    table = wait.until(
        EC.visibility_of_element_located((By.CSS_SELECTOR, ".table.table-bordered tr[style='background: #eeeeee;']")))
    data = []
    rows = driver.find_elements_by_css_selector(".table.table-bordered tr[style='background: #eeeeee;']")
    for row in rows:
        qty = row.find_element_by_xpath("./td[1]").text
        stock = row.find_element_by_xpath("./td[2]").text
        name = row.find_element_by_xpath("./td[3]").text
        if int(stock) <= 50:
            data.append([stock, name])
    print("Number left/Flavor/Fume Infinity Disposables 5PC")
    print(*data, sep='\n')
    # Fume Extra
    driver.get("https://safagoods.com/vape-shop/disposable-vape-devices/fume-extra-10pc")
    wait = WebDriverWait(driver, 15)
    table = wait.until(
        EC.visibility_of_element_located((By.CSS_SELECTOR, ".table.table-bordered tr[style='background: #eeeeee;']")))
    data = []
    rows = driver.find_elements_by_css_selector(".table.table-bordered tr[style='background: #eeeeee;']")
    for row in rows:
        qty = row.find_element_by_xpath("./td[1]").text
        stock = row.find_element_by_xpath("./td[2]").text
        name = row.find_element_by_xpath("./td[3]").text
        if int(stock) <= 50:
            data.append([stock, name])
    print("Number left/Flavor/Fume Extra Disposables 10PC")
    print(*data, sep='\n')

    driver.close()

#tkinter gui window and displayed options
window = Tk()
window.geometry("450x200")
search = Label(window,text= "Which stock would you like to check?",font='times 15')
search.place(x=20,y=20)

#buttons
b1 = Button(window,text="vapes",command=search_result,width = 12, bg= 'gray')
b1.place(x=150,y=50)
#b2 = Button(window,text="vape juices",command=search_result,width = 12, bg= 'gray')
#b2.place(x=150,y=90)

#b2 = Button(window,text="Juices",command=vape_juices,width = 12, bg= 'gray')
#b2.place(x=300,y=50)

window.mainloop()

对不起,如果这个问题让人困惑的话,我对编程相当陌生。谢谢各位


Tags: textfromimportdatabydriverseleniumstock
2条回答

我找到了一些与您的问题相匹配的答案/文章:

  1. Is it possible to render html in tkinter
  2. How to use Html in tkinter program
  3. Create table in tkinter

第一个链接建议您使用^{}

Yes, you can both embed HTML and open full webpages (with CSS and javascript even) in tkinter. With the cefpython module you can embed a full-blown Chromium browser in a tk window.

第二个建议您使用^{}

The tkhtmlview module is a collection of Tkinter widgets whose text can be set in HTML format. An HTML widget isn’t a web browser frame, it’s only a simple and lightweight HTML parser that formats the tags used by the Tkinter Text base class.

我在这两篇文章中都没有找到确切的table代码。在进一步的研究之后,我发现了第三篇文章,它为您提供了table,但我认为,它不能解决您在您的环境中的问题

所以,这里是我的建议您已经从那里刮取了页面并获得了所需的数据,现在您想在表中显示这一点。您可以这样做:

首先尝试创建表并手动在表中插入数据,您已经手动完成并得到了某种类型的表,对吗?现在尝试更改代码,通过循环数据将数据插入表中,就像手动操作一样

以下是上述想法的示例代码

## Like you have this kind of list
lst = [(1,'Raj','Mumbai',19),
       (2,'Aaryan','Pune',18),
       (3,'Vaishnavi','Mumbai',20),
       (4,'Rachna','Mumbai',21),
       (5,'Shubham','Delhi',21)]
## Now we have to insert this list into table then, we can loop through the list and insert it one by one.
for i in range(len(lst)): #For rows
    for j in range(len(lst[0])): #For column
        e = Entry(root, width=20, fg='blue',font=('Arial',16,'bold'))
        e.grid(row=i, column=j)
        e.insert(END, lst[i][j])

有关上述脚本的更多信息,请访问Create table using tkinter

如果你想要任何其他想法或不理解任何东西,那么试着通过评论联系我

您可以尝试使用Treeview

我在下面的代码中添加了一个,但有点粗糙。:)


from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from tkinter import *
from tkinter import ttk

import time
PATH = "chromedriver.exe"
driver = webdriver.Chrome(PATH)
def search_result():
    # fume infinity
    driver.get("https://safagoods.com/vape-shop/disposable-vape-devices/fume-infinity-disposable-device")
    wait = WebDriverWait(driver, 15)
    table = wait.until(
        EC.visibility_of_element_located((By.CSS_SELECTOR, ".table.table-bordered tr[style='background: #eeeeee;']")))
    data = []
    rows = driver.find_elements_by_css_selector(".table.table-bordered tr[style='background: #eeeeee;']")
    for row in rows:
        qty = row.find_element_by_xpath("./td[1]").text
        stock = row.find_element_by_xpath("./td[2]").text
        name = row.find_element_by_xpath("./td[3]").text
        if int(stock) <= 50:
            data.append([stock, name])

    #populate treeview
    for idx, vals in enumerate(data):
      print(idx)
      tree.insert(parent='', index=idx, values=vals)
      
    print("Number left/Flavor/Fume Infinity Disposables 5PC")
    print(*data, sep='\n')
    # Fume Extra
    driver.get("https://safagoods.com/vape-shop/disposable-vape-devices/fume-extra-10pc")
    wait = WebDriverWait(driver, 15)
    table = wait.until(
        EC.visibility_of_element_located((By.CSS_SELECTOR, ".table.table-bordered tr[style='background: #eeeeee;']")))
    data = []
    rows = driver.find_elements_by_css_selector(".table.table-bordered tr[style='background: #eeeeee;']")
    for row in rows:
        qty = row.find_element_by_xpath("./td[1]").text
        stock = row.find_element_by_xpath("./td[2]").text
        name = row.find_element_by_xpath("./td[3]").text
        if int(stock) <= 50:
            data.append([stock, name])
    print("Number left/Flavor/Fume Extra Disposables 10PC")
    print(*data, sep='\n')

    driver.close()

#tkinter gui window and displayed options
window = Tk()
window.geometry("450x500")
search = Label(window,text= "Which stock would you like to check?",font='times 15')
search.place(x=20,y=20)

#buttons
b1 = Button(window,text="vapes",command=search_result,width = 12, bg= 'gray')
b1.place(x=150,y=50)

# add treeview
tree = ttk.Treeview(window, )
tree['columns'] = ['Quantity', 'Name']
tree.column('#0', width=0, stretch=NO)
tree.column('Quantity', anchor=CENTER, width=100)
tree.column('Name', anchor=CENTER, width=200)

tree.heading('#0', text='', anchor=CENTER)
tree.heading('Quantity', text='Quantity', anchor=CENTER)
tree.heading('Name', text='Name', anchor=CENTER)

tree.place(x=0, y=200)



#b2 = Button(window,text="vape juices",command=search_result,width = 12, bg= 'gray')
#b2.place(x=150,y=90)

#b2 = Button(window,text="Juices",command=vape_juices,width = 12, bg= 'gray')
#b2.place(x=300,y=50)

window.mainloop()

相关问题 更多 >

    热门问题