2年ほど放置してしまったので、以前動いていたコードが動かなくなっている。Seleniumのversionが上がったため、下記投稿の”stock_list_maker.py”をそのまま実行するとエラーがでる。エラーのメッセージは”TypeError: WebDriver.init() got multiple values for argument ‘options’”というものだ
「Rubyではじめるシステムトレード」のPython版開発3
調べてみると問題解決には、下記ブログが大変有益であった。
SeleniumとChromeDriverManagerについて(備忘録)
Selenium4 WebDriver の executable_path 使用に伴う警告の回避方法
以下のようにコードを修正すると、上記のエラーが出なくなったが、今度はChromeDriverのバージョンが古すぎるエラーが出るようになった。
import bs4
import traceback
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
CHROMEDRIVER = "C:/Users/itot/chromedriver.exe"
INTERVAL_TIME = 2
class StockListMaker:
def __init__(self, market):
self.market = market
self.data_dir = "data"
self.stock_info = []
self.options = Options()
self.options.add_argument('--hedless')
self.service = Service(executable_path=CHROMEDRIVER)
self.driver = webdriver.Chrome(service=self.service, options=self.options)
def get_stock_info(self, code):
page = self.open_page(code)
data = self.parse(page)
if not data:
return
if "None" in data:
return
data.insert(0,code)
print(data)
self.stock_info.append(data)
def save_stock_list(self):
with open('./list.txt', 'w', encoding='utf-8') as f:
print(*self.stock_info, sep='\n', file=f)
f.close()
## Private
def open_page(self, code):
try:
base_url = "https://kabutan.jp/stock/?code="
url = base_url + code
self.driver.get(url)
self.driver.implicitly_wait(10)
page_source = self.driver.page_source
time.sleep(INTERVAL_TIME)
return page_source
except Exception as e:
print("Exception\n" + traceback.format_exc())
return None
def parse(self, page):
try:
soup = bs4.BeautifulSoup(page, features='lxml')
base_elem = soup.find("div", class_="si_i1_1")
if base_elem:
market = None
unit = None
market_elem = base_elem.find("span", class_="market")
unit_elem = soup.find("div", id="stockinfo_i2")
if market_elem:
market = market_elem.text
if unit_elem:
unit = unit_elem.find_all("dd")
data = [market,unit[1].text]
return data
except Exception as e:
print("Exception\n" + traceback.format_exc())
return None