Search code examples
pythonseleniumselenium-webdriverexecx-freeze

cx_Freeze application gives a strange error


I am trying to make my selenium project(that scrapes some data from a website and converting it into a sheets file) into an .exe file using cx_Freeze. When I run the setup.py file it is successfully build me an .exe file but when Im trying to run it I get this error: image

this is My setup.py code:

import sys
import os.path
from cx_Freeze import setup, Executable


# Dependencies are automatically detected, but it might need fine tuning.
# "packages": ["os"] is used as example only
build_exe_options = {"packages": ['gspread',
                                  'oauth2client.service_account',
                                  'selenium',
                                  'selenium.webdriver',
                                  'selenium.webdriver.chrome.service',
                                  'webdriver_manager.chrome'],
                     "include_files": ['Dates.txt', 'credentials.json']
                     }

# base="Win32GUI" should be used only for Windows GUI app
base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(
    name="PerfumesTOSheets",
    version="0.1",
    description="Converts a website UI into sheets doc",
    options={"build_exe": build_exe_options},
    executables=[Executable("main.py", base=base)]
)

and this is my main.py code which is working successfully:

from datetime import date

import gspread
from oauth2client.service_account import ServiceAccountCredentials
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager


urlM = 'https://www.myperfume.co.il/155567-%D7%9B%D7%9C-%D7%94%D7%9E%D7%95%D7%AA%D7%92%D7%99%D7%9D-%D7%9C%D7%92%D7%91' \
       '%D7%A8?order=up_title&page=0'
urlF = 'https://www.myperfume.co.il/155569-%D7%9B%D7%9C-%D7%94%D7%9E%D7%95%D7%AA%D7%92%D7%99%D7%9D-%D7%9C%D7%90%D7%99' \
       '%D7%A9%D7%94?order=up_title&page=0'

scope = ["https://spreadsheets.google.com/feeds", 'https://www.googleapis.com/auth/spreadsheets',
         "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
client = gspread.authorize(creds)

spreadsheet = client.open("Perfumes")

options = ChromeOptions()
options.headless = True
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
MALE = []
FEMALE = []
elementsM = ' '
elementsF = ' '
lenM = 0
lenF = 0
while len(elementsM) + len(elementsF) != 0:
    urlM = urlM[:-1] + str(int(urlM[-1]) + 1)
    urlF = urlF[:-1] + str(int(urlF[-1]) + 1)
    driver.get(urlM)
    elementsM = driver.find_elements_by_css_selector("h3.title.text-center")
    for i in elementsM:
        lenM += 1
        MALE.append(i.text)
        # worksheet.update_cell(lenM + 5, 2, i.text)
    driver.get(urlF)
    elementsF = driver.find_elements_by_css_selector("h3.title.text-center")
    for i in elementsF:
        lenF += 1
        FEMALE.append(i.text)
        # worksheet.update_cell(lenF + 5, 6, i.text)
    # for i in range(lenF - 6, lenF + 6):
    #   worksheet.update_cell(i, 1, i)

name = date.today().strftime("%d/%m/%Y") + " - 1"
with open('Dates.txt', 'a+') as dates:
    dates.seek(0)
    if name[:-1] == dates.readlines()[-1][:-1]:
        dates.seek(0)
        name = name[:-1] + str(int(dates.readlines()[-1][-1]) + 1)
    dates.write('\n' + name)
worksheet = spreadsheet.add_worksheet(name, 1000, 10)

# male
cell_list = worksheet.range(f'B6:B{lenM + 6 - 1}')
for i, val in enumerate(MALE):
    cell_list[i].value = val
worksheet.update_cells(cell_list)
# female
cell_list = worksheet.range(f'F6:F{lenF + 6 - 1}')
for i, val in enumerate(FEMALE):
    cell_list[i].value = val
worksheet.update_cells(cell_list)
# id
cell_list = worksheet.range(f'A6:A{max(lenF, lenM) + 6 - 1}')
for i, val in enumerate(range(6, max(lenF, lenM) + 6)):
    cell_list[i].value = val - 5
worksheet.update_cells(cell_list)

worksheet.update_cell(1, 1, "𝗠𝗔𝗟𝗘 𝗨𝗥𝗟")
worksheet.update_cell(2, 1, "𝗙𝗘𝗠𝗔𝗟𝗘 𝗨𝗥𝗟")
worksheet.update_cell(1, 2, urlM)
worksheet.update_cell(2, 2, urlF)
worksheet.update_cell(4, 1, '𝗜𝗗')
worksheet.update_cell(4, 2, '𝗠𝗔𝗟𝗘')
worksheet.update_cell(4, 6, '𝗙𝗘𝗠𝗔𝗟𝗘')

driver.quit()

def launchBrowser():
    chrome_options = ChromeOptions()
    chrome_options.add_argument("start-maximized")
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), chrome_options=chrome_options)

    driver.get('https://docs.google.com/spreadsheets/d/1tph6zGVZIUxElss95BMzPsAg7qWaqnplBxIJDpP1JwA/edit?usp=sharing')
    return driver


driver = launchBrowser()

Does anyone knows how to fix this error?


Solution

  • Try leaving the base == None, it crashes for me when it is set to "Win32GUI"