前提・実現したいこと
colabを使用してコードを書きましたが
実行した際に以下に記載しているコードセルの実行がいつまで経っても完了しない。
該当のソースコード
python
1!apt-get update 2!pip install selenium 3!apt install chromium-chromedriver 4!cp /usr/lib/chromium-browser/chromedriver /usr/bin 5!apt-get -y install fonts-ipafont-gothic 6 7import sys 8 9from selenium import webdriver 10from selenium.webdriver.chrome.options import Options 11 12sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver') 13 14from google.colab import drive 15drive.mount('/content/drive') 16 17def chrome_driver(): 18 options = Options() 19 options.add_argument('--headless') 20 options.add_argument('--no-sandbox') 21 options.add_argument('--disable-dev-shm-usage') 22 return webdriver.Chrome('chromedriver', options=options) 23 24 25driver = chrome_driver() 26try: 27 driver.get('https://www.google.com/') 28 print(driver.current_url) # https://www.google.com/ 29finally: 30 driver.quit()
# seleniumでEnterキーを送信する際に使用するのでimport from selenium.webdriver.common.keys import Keys # seleniumでヘッドレスモードを指定するためにimport from selenium.webdriver.chrome.options import Options # 待ち時間を指定するためにtimeをimport import time # 正規表現にマッチする文字列を探すためにreをimport import re # Googleのトップページ URL = 'https://www.google.com/' # Googleのトップページに遷移したらタイトルに'Google'が含まれているか確認するために指定 ''' メインの処理 Googleの検索エンジンでキーワードを検索 指定されたドメインが検索結果の1ページ目に含まれていないキーワードをテキストファイルに出力 ''' def main(): with open('/content/drive/MyDrive/検索キーワードファイル.txt のコピー') as f: # '検索キーワードリスト.txt'ファイルを読み込み、リストにする keywords = [s.rstrip() for s in f.readlines()] with open('/content/drive/MyDrive/競合リスト.txt のコピー') as f: # 1行ずつ読み込んで改行コードを削除してリストにする domains = [s.rstrip() for s in f.readlines()] # 'ドメインリスト.txt'ファイルを読み込み、リストにする # 1行ずつ読み込んで改行コードを削除してリストにする options = webdriver.ChromeOptions() # seleniumで自動操作するブラウザはGoogleChrome # Optionsオブジェクトを作成 # ヘッドレスモードを有効にする options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') # ChromeのWebDriverオブジェクトを作成 #driver = webdriver.Chrome(options=options, executable_path=r"/content/drive/MyDrive") #driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options) driver = webdriver.Chrome('chromedriver',options=options) #driver = webdriver.Chrome(options=options) # driver = webdriver.Chrome(options=options, executable_path=r"Windowsのchromedriver.exeを置いたパス") driver.get(URL) # Googleのトップページを開く time.sleep(2) # 2秒待機(読み込みのため) # タイトルに'Google'が含まれていることを確認 ok_keywordlist = [] for keyword in keywords:# 検索キーワードを1つずつ取り出す search(keyword,driver)# search関数実行 urls = get_url(driver) # get_url関数を実行し、戻り値をurlsに代入 weak_keywordlist = domain_checked(urls,domains,ok_keywordlist,keywords)# domain_checked関数を実行し、戻り値をok_keywordlistに代入 with open('結果.txt','w')as f: # '結果.txt'という名前を付けて、ドメインチェックしたキーワードをファイルに書き込む f.write('/n'.join(weak_keywordlist))# ドメインチェック済みのキーワードを1行ずつ保存 driver.quit() # ブラウザーを閉じる
''' 検索テキストボックスに検索キーワードを入力し、検索する ''' def search(keyword,driver): input_element = driver.find_element_by_name("q")# 検索テキストボックスの要素をname属性から取得 input_element.clear()# 検索テキストボックスに入力されている文字列を消去 input_element.send_keys("keyword")# 検索テキストボックスにキーワードを入力 input_element.send_keys(Keys.RETURN)# Enterキーを送信 time.sleep(2)# 2秒待機 # タイトルにkeywordが含まれていることを確認 ''' 検索結果ページの1位から10位までのURLを取得 ''' def get_url(driver): urls = [] # 各ページのURLを入れるためのリストを指定 objects = driver.find_elements_by_css_selector('div.yuRUbf > a') # a要素(各ページの1位から10位までのURL)取得 if objects: # objects = driver.find_elements_by_css_selector('.rc > .r > a') for object in objects: urls.append(object.get_attribute('href')) # 各ページのURLをリストに追加 else: print('URLが取得できませんでした') # 各ページのURLが取得できなかった場合は警告を出す #rso > div:nth-child(10) > div > div.yuRUbf > a return urls # 各ページのURLを戻り値に指定 ''' URLリストからドメインを取得し、指定ドメインに含まれているかチェック ''' def domain_checked(urls,domains,keyword,ok_keywordlist):# URLリストから各ページのURLを1つずつ取り出す for url in urls: # '//〇〇/'に一致する箇所(ドメイン)を抜き出す m = re.search(r'//(.*?)/',url) domain = m.group(1) # '//〇〇/'の'〇〇'に一致する箇所を抜き出し、domainに代入 if 'www.' in domain: # ドメインに'www.'が含まれているかチェック domain = domain[4:] # 含まれているなら'www.'を除去 if domain in domains: # 各ページのドメインが指定ドメインに含まれているかチェック print(f'キーワード{"ファッション"}の検索結果には大手ドメインがありましたので除外します') # 含まれているなら警告を出す break # 1つでも含まれているなら他はチェックする必要がないので関数を終了 else: ok_keywordlist.append('ファッション') # 指定ドメインに含まれていないならキーワードをok_keywordlistに追加 return ok_keywordlist# ドメインチェック済みのキーワードを戻り値に指定 # main関数を実行 if __name__ == "__main__": main()
↑ここのコードセルが完了しません。
補足情報(FW/ツールのバージョンなど)
chrome OS, Google colab
あなたの回答
tips
プレビュー