Sep-09-2021, 01:06 PM
When I run the following code, I get this error. I am not sure what it means or how to correct this error.
I take it that I must download and install a new Chromedriver for Windows 10 (I choose the stable version ) and then put it in my path.
Is that all. I must do? When was this changed? I have similar software before, but never had this situation.
Any help appreciated.
Respectfully,
LZ
import numpy as np from datetime import datetime import smtplib from selenium import webdriver import os #For Prediction from sklearn.linear_model import LinearRegression from sklearn.model_selection import cross_validate from sklearn import preprocessing #For Stock Data from iexfinance.stocks import get_historical_data def getStocks(n): #Navigating to the Yahoo stock screener driver = webdriver.Chrome( 'PATH TO CHROME DRIVER') url = "https://finance.yahoo.com/screener/predefined/aggressive_small_caps?offset=0&count=202" driver.get(url) #Creating a stock list and iterating through the ticker names on the stock screener list stock_list = [] n += 1 for i in range(1, n): ticker = driver.find_element_by_xpath( '//*[@id = "scr-res-table"]/div[2]/table/tbody/tr[' + str(i) + ']/td[1]/a') stock_list.append(ticker.text) driver.quit() #Using the stock list to predict the future price of the stock a specificed amount of days number = 0 for i in stock_list: print("Number: " + str(number)) try: predictData(i, 5) except: print("Stock: " + i + " was not predicted") number += 1 def sendMessage(text): # If you're using Gmail to send the message, you might need to # go into the security settings of your email account and # enable the "Allow less secure apps" option username = "EMAIL" password = "PASSWORD" vtext = "[email protected]" message = text msg = """From: %s To: %s %s""" % (username, vtext, message) server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(username, password) server.sendmail(username, vtext, msg) server.quit() print('Sent') def predictData(stock, days): print(stock) start = datetime(2017, 1, 1) end = datetime.now() #Outputting the Historical data into a .csv for later use df = get_historical_data(stock, start=start, end=end, output_format='pandas') if os.path.exists('./Exports'): csv_name = ('Exports/' + stock + '_Export.csv') else: os.mkdir("Exports") csv_name = ('Exports/' + stock + '_Export.csv') df.to_csv(csv_name) df['prediction'] = df['close'].shift(-1) df.dropna(inplace=True) forecast_time = int(days) #Predicting the Stock price in the future X = np.array(df.drop(['prediction'], 1)) Y = np.array(df['prediction']) X = preprocessing.scale(X) X_prediction = X[-forecast_time:] X_train, Y_train, Y_test = cross_validation.train_test_split( X, Y, test_size=0.5) #Performing the Regression on the training data clf = LinearRegression() clf.fit(X_train, Y_train) prediction = (clf.predict(X_prediction)) last_row = df.tail(1) print(last_row['close']) #Sending the SMS if the predicted price of the stock is at least 1 greater than the previous closing price if (float(prediction[4]) > (float(last_row['close'])) + 1): output = ("\n\nStock:" + str(stock) + "\nPrior Close:\n" + str(last_row['close']) + "\n\nPrediction in 1 Day: " + str( prediction[0]) + "\nPrediction in 5 Days: " + str(prediction[4])) sendMessage(output) if __name__ == '__main__': getStocks(200)This when run on a Windows 10 machine produces the error.
Output:FileNotFoundError Traceback (most recent call last)
~\miniconda3\envs\tensorflow-2.1\lib\site-packages\selenium\webdriver\common\service.py in start(self)
75 stderr=self.log_file,
---> 76 stdin=PIPE)
77 except TypeError:
~\miniconda3\envs\tensorflow-2.1\lib\subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
799 errread, errwrite,
--> 800 restore_signals, start_new_session)
801 except:
~\miniconda3\envs\tensorflow-2.1\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session)
1206 os.fspath(cwd) if cwd is not None else None,
-> 1207 startupinfo)
1208 finally:
FileNotFoundError: [WinError 2] The system cannot find the file specified
During handling of the above exception, another exception occurred:
WebDriverException Traceback (most recent call last)
<ipython-input-1-d737cd6c0180> in <module>
103
104 if __name__ == '__main__':
--> 105 getStocks(200)
<ipython-input-1-d737cd6c0180> in getStocks(n)
16 #Navigating to the Yahoo stock screener
17 driver = webdriver.Chrome(
---> 18 'PATH TO CHROME DRIVER')
19 url = "https://finance.yahoo.com/screener/predefined/aggressive_small_caps?offset=0&count=202"
20 driver.get(url)
~\miniconda3\envs\tensorflow-2.1\lib\site-packages\selenium\webdriver\chrome\webdriver.py in __init__(self, executable_path, port, options, service_args, desired_capabilities, service_log_path, chrome_options, keep_alive)
71 service_args=service_args,
72 log_path=service_log_path)
---> 73 self.service.start()
74
75 try:
~\miniconda3\envs\tensorflow-2.1\lib\site-packages\selenium\webdriver\common\service.py in start(self)
81 raise WebDriverException(
82 "'%s' executable needs to be in PATH. %s" % (
---> 83 os.path.basename(self.path), self.start_error_message)
84 )
85 elif err.errno == errno.EACCES:
WebDriverException: Message: 'PATH TO CHROME DRIVER' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
I take it that I must download and install a new Chromedriver for Windows 10 (I choose the stable version ) and then put it in my path.
Is that all. I must do? When was this changed? I have similar software before, but never had this situation.
Any help appreciated.
Respectfully,
LZ