前提・実現したいこと
ローカルで動かしていたpythonファイルをherokuにアップロードして動かしたいです。
こちらのサイトを参考に、デプロイしたんですがエラーが出て実行できません。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "py.py", line 2, in <module> from selenium import webdriver ModuleNotFoundError: No module named 'selenium'
該当のソースコード
ディレクトリ
file
-- email.elsx
-- Pipfile
-- Pipfile.lock
-- Prockfile
-- py.py
-- requirements.txt
-- runtime.txt
pythonファイル
python
1import os 2from selenium import webdriver 3from selenium.webdriver.common.keys import Keys 4from selenium.webdriver.common.by import By 5import chromedriver_binary 6from selenium.webdriver.common.action_chains import ActionChains 7from selenium.webdriver.chrome.options import Options 8from time import sleep, time 9import random 10import requests 11from bs4 import BeautifulSoup 12import re 13from fake_useragent import UserAgent 14import openpyxl 15import time 16 17# 全てのリンクを辿って取得 18 19# そのリンクのページでbs4で取得 20 21def get_keyword(ws, keyword_lists, ex_row): 22 while not ws.cell(ex_row, 2).value is None: 23 print(ws.cell(ex_row, 2).value) 24 keyword = ws.cell(ex_row, 2).value 25 keyword_lists.append(keyword) 26 ex_row = ex_row + 1 27 28 if ex_row > 10000: 29 break 30 31 if keyword == 'None': 32 break 33 34def link_search(keyword): 35 driver.get('https://www.google.co.jp') 36 elem_h3_li = [] 37 38 search_bar = driver.find_element(By.NAME, "q") 39 search_bar.send_keys(keyword) 40 try: 41 search_bar.submit() 42 except: 43 print('なんかできない') 44 sleep(8) 45 46 try: 47 elem_h3_li = driver.find_elements_by_xpath('//a/h3') 48 except: 49 print('なし') 50 51 for elem_h3 in elem_h3_li: 52 i =+ 1 53 elem_a = elem_h3.find_element_by_xpath('..') 54 elem_a_href = elem_a.get_attribute('href') 55 if 'google.co.jp' in elem_a_href: 56 print('グーグルだ') 57 break 58 else: 59 link_lists.append(elem_a.get_attribute('href')) 60 61 if i > 6: 62 break 63 64 65def access(link_lists, keyword): 66 mail = '' 67 68 # 取得したリンクにアクセスして該当キーワードがあるか 69 for link in link_lists: 70 71 try: 72 # スクレイピング対象の URL にリクエストを送り HTML を取得する 73 res = requests.get(link,headers=header,timeout=(6.0, 10.5),verify=False) 74 except (requests.exceptions.ConnectTimeout,requests.exceptions.ReadTimeout): 75 break 76 except: 77 break 78 # レスポンスの HTML から BeautifulSoup オブジェクトを作る 79 try: 80 soup = BeautifulSoup(res.text, 'html.parser') 81 except: 82 print('アクセスできない') 83 print(link) 84 85 86 # 完全一致したら処理終了 87 if soup.find(text=keyword): 88 sleep(sleeptime) 89 hantei_num = hantei[2] 90 mail = soup.find(text=keyword) 91 print('-------完全一致--------') 92 print(mail) 93 return hantei_num, mail, link 94 95 # 似たようなものがあれば 96 if soup.find(text=re.compile(keyword)): 97 sleep(sleeptime) 98 hantei_num = hantei[1] 99 mail = soup.find(text=re.compile(keyword)) 100 print('-------似ている--------') 101 print(mail) 102 return hantei_num, mail, link 103 104 # 何もないので 105 hantei_num = hantei[0] 106 link = '' 107 return hantei_num, mail, link, 108 109 110def ex(ex_arry, ex_row): 111 # Excelに登録 112 ex_col = 3 113 for ex_item in ex_arry: 114 cell = ws.cell( row=ex_row, column=ex_col ) 115 cell.value = ex_item 116 print(ex_col) 117 print(ex_row) 118 ex_col = ex_col + 1 119 wb.save(ex_name) 120 wb.close() 121 122 123if __name__ == '__main__': 124 # heroku用にchromedriverのPATHを指定 125 driver_path = '/app/.chromedriver/bin/chromedriver' 126 # アクセスの定義づけ 127 options = Options() 128 options.add_argument('--headless') 129 options.add_argument('--disable-gpu') 130 options.add_argument('--no-sandbox') 131 options.add_argument('--disable-dev-shm-usage') 132 options.add_argument('--remote-debugging-port=9222') 133 driver = webdriver.Chrome(options=options, executable_path=driver_path) 134 # driver = webdriver.Chrome() 135 ua = UserAgent() 136 header = {'user-agent':ua.chrome} 137 138 start_time = time.time() 139 140 ex_name = "email.xlsx" 141 wb = openpyxl.load_workbook( ex_name ) 142 ws = wb[ "作業リスト" ] 143 ex_row = 1211 # 開始シート行 144 145 # 5〜10のランダム数字一時停止にしよう 146 sleeptime = random.randint(5,10) 147 148 # メールアドレスリスト 149 keyword_lists = [] 150 # 判定 151 hantei = ['×', '異なる', '同一'] 152 153 get_keyword(ws, keyword_lists, ex_row) 154 155 for keyword in keyword_lists: 156 # Googleの検索リンク初期化 157 link_lists = [] 158 159 # 該当するリンクを取得 160 link_search(keyword) 161 sleep(sleeptime) 162 print(keyword) 163 print('キーワード検索') 164 165 # メールアドレスのあるリンクをチェック 166 # 戻り値アドレス、判定num、リンクを変数に入れる 167 link, mail_item, h_num = access(link_lists, keyword) 168 print('--------結果------') 169 print(mail_item) 170 print(h_num) 171 print(link) 172 print('------------------') 173 # エクセルに追加 174 175 ex_arry = [] 176 177 ex_arry.append(h_num) 178 ex_arry.append(mail_item) 179 ex_arry.append(link) 180 181 print('エクセル記述') 182 print(ex_arry) 183 ex(ex_arry, ex_row) 184 ex_row = ex_row + 1
requirements.txtにはseleniumありました。
pip3 freeze > requirements.txt
このコードで中身は書いております。
試したこと
pipfile.lockをデプロイしたりしましたが、変わりませんでした。
補足情報(FW/ツールのバージョンなど)
mac
python 3.8.8
selenium
github
heroku
あなたの回答
tips
プレビュー