Skip to content
Advertisement

How to display HTML Table data cell elements in Tkinter GUI using Selenium?

I want to make a program that takes the table data cell elements of tables from a wholesale website (the tables show stock of disposable vapes), and then will display which items are low on stock on a Tkinter GUI. So far I am using selenium to go to different URLs of various vapes and print out the stock of certain flavors of those vapes depending on if they are below a certain number. I’ve added a Tkinter GUI which asks what stock you would like to check and launches selenium when you press on the ‘Vapes’ button. Would it be possible to display the HTML data on the Tkinter GUI itself, instead of just printing it to Terminal? Here is my code so far, I plan on adding more vapes and other items but only did two here so it doesn’t look as messy:

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

Sorry if this question is confusing I’m fairly new to programming. Thanks guys.

Advertisement

Answer

You could try using a Treeview.

I’ve added one in the code below, it’s a bit rough though.:)

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

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement