変更点は以下の通り
①関数化、クラス化した。これでほかのところから呼び出したりできるようになった
②コマンドライン引数を追加したので、検索の自由度が上がった
import time
import argparse
class FINDING_PRICE:
def __init__(self):
self.search_word = ""
self.search_item = ""
#アマゾンのトップページに遷移する
#ドライバーの作成をする
ChromeOptions = webdriver.ChromeOptions()
ChromeOptions.add_experimental_option('excludeSwitches', [ 'enable-automation' ,'enable-logging'])
driver = webdriver.Chrome(ChromeDriverManager().install())
url = "https://www.amazon.co.jp/"
driver.get(url)
return driver
def search_execute(self,driver,search_word):
#検索語で検索を実行する
self.search_word = search_word
search_txtbox_selector ="#twotabsearchtextbox"
search_button_selector ="div.nav-right #nav-search-submit-button"
time.sleep(3)
search_text = driver.find_element(By.CSS_SELECTOR, search_txtbox_selector)
search_text.send_keys(self.search_word)
time.sleep(3)
search_button = driver.find_element(By.CSS_SELECTOR, search_button_selector)
search_button.click()
return driver
def click_item_url(self,driver,search_item):
#検索で一番目に引っかかったアイテムのURLに飛ぶ関数
for x in list(range(2,12)): #おすすめ表示の上から11件をなめる
item_xpath_former = "//*[@id='search']/div[1]/div[1]/div/span[1]/div[1]/div["
item_xpath_mid = "]/div/div/div/div/div[2]/div[1]/h2/a"
item_xpath_later = "/span"
item_name = item_name_selector.text #商品名を取得する
item_flag = 0 #アイテムを見つけたかどうかのフラグ
if search_item in item_name:
item_flag = 1 #アイテムを見つけたときにフラグをたてる
break
if item_flag == 1:
item_url_selector.click() #商品リンクをクリック
print(item_name)
time.sleep(3)
return driver,item_flag,item_name
def get_price(self,driver,item_flag):
if item_flag == 1:
search_price_selector = ".a-price-whole"
search_price = driver.find_element(By.CSS_SELECTOR, search_price_selector)
price = search_price.text
print(str(price))
else:
print("商品はありません")
price = ""
return driver,price
"""
driver.quit() #ドライバを閉じる
"""
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="検索キーワードとアイテム名を指定すると価格をとってきてくれるプログラム")
parser.add_argument("search_word", help="検索キーワード")
parser.add_argument("search_item", help="アイテム名")
args = parser.parse_args()
search_word = args.search_word
search_item = args.search_item
res = FINDING_PRICE()
res_search = res.search_execute(driver,search_word)
res_click = res.click_item_url(res_search,search_item)
no_flag = res_click[1]
driver = res_click[0]
res.get_price(driver,no_flag)