9

I have created a small web scraping app using Selenium & chromedriver for a project that outputs the content into an excel file. The people I did this app for unfortunately aren't the most tech-savvy.

So my question is how can I share this app with these people?

I looked into py2exe.org, but it doesn't take the chromedriver into account when creating the executable. Any better ways of doing this, without these people having to add the files manually to their "usr/bin"?

1
  • Are you using macOS? Commented Apr 16, 2018 at 9:00

1 Answer 1

9

You can do this with the help of pyinstaller : Below is the solution which work on Windows but pyinstaller says its capable of working on Mac OS also.

Steps are:

  1. Open Command prompt
  2. Go to the project path in cmd where the script is present
  3. type pyinstaller Scriptname.spec Scriptname.py (Enter y/yes if prompt on screen)
  4. The build will be at 'path to project'\dist\Scriptname

Note you need to provide the details of chromedriver in Scriptname.spec when passing the

Sample content of spec file:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['Scriptname.py'],
             pathex=['Pathofproject'],
             binaries=[('C:\\Python27\\chromedriver.exe', '**.\\selenium\\webdriver**')],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=True,
          name='createEVIPOrg_Automation_new',
          debug=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='**scriptname**')

You need to update the Scriptname, project path where you script lies, path of chromedriver in spec file

Sign up to request clarification or add additional context in comments.

5 Comments

Thanks! I'm trying to use the --onefile command, but then it doesn't take the binaries into account. I only get the error " FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver': 'chromedriver'". Any workaround for this?
you need to provide the path of chromedriver of your machine under binaries of spec file
I currently have the following: binaries=[('/usr/local/bin/chromedriver', '.')], And then the following line in the .py script: cdriver_path = os.path.join(sys._MEIPASS, "chromedriver") driver = webdriver.Chrome(cdriver_path) - I still get the same error, seems like I can't point to the output folder when it is --onefile?
solved it! The path worked eventually, the key was to execute the file by using "pyinstaller --onefile scriptname.spec" (excluding scriptname.py). Then it bundled everything nicely
Can you please help with firefox, I set binaries=[("C:\\python36\\geckodriver.exe", '.')],, I get ** No module named 'selenium'**

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.