From 5fefa1b862393b159b54accaf66bb5bf96d401c5 Mon Sep 17 00:00:00 2001 From: joey0629 Date: Tue, 21 May 2024 23:51:02 +0800 Subject: [PATCH] before update driver.refresh() --- main.py | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 116 insertions(+), 9 deletions(-) diff --git a/main.py b/main.py index 35b12af..5976ee8 100644 --- a/main.py +++ b/main.py @@ -11,7 +11,9 @@ from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager from selenium.common.exceptions import WebDriverException - +import pytz +from selenium.webdriver.common.by import By +from selenium.webdriver.chrome.options import Options BOT_TOKEN = '6701395239:AAFE30dqvNihDdni9vYoAbWssO-X5yAmwho' # BOT_TOKEN = "6746720034:AAEMaoV2FwIZ8pz_PF18-bo2a6gFC1eVtVs" @@ -125,6 +127,36 @@ def find_non_farm(url): value = driver.find_element(By.XPATH, '/html/body/div[2]/div[5]/div/div[1]/pre').text.split('\n')[8:12] # driver.quit() return date , value +def find_pmi(month:str): + from selenium import webdriver + from selenium.webdriver.common.by import By + from selenium.webdriver.chrome.options import Options + + from selenium.webdriver.support.ui import WebDriverWait + from selenium.webdriver.support import expected_conditions as EC + import time + print("Start") + options = Options() + options.add_argument('--headless') + options.add_argument('--no-sandbox') + options.add_argument('--disable-dev-shm-usage') + options.add_argument("--window-size=1920,1080") # 可以根據需要調整這個大小 + options.add_argument( + 'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3') + driver = webdriver.Chrome( options=options) + driver.get(pmi_url+month+"/") + print("Open") + # time.sleep(4) + agree_button = driver.find_element(By.XPATH, '//*[@id="alert-modal-disclaimer___BV_modal_body_"]/center/input') + agree_button.click() + + date = driver.find_element(By.XPATH, '//*[@id="main"]/div[1]/div/div[2]/div/div[1]/div/div/div[1]/div[1]/h1[2]').text.split(' ')[0] + value = driver.find_element(By.XPATH, '//*[@id="main"]/div[1]/div/div[2]/div/div[1]/div/div/div[1]/div[1]/p[3]').text.split('.')[0:4] + #將value list 串起來成一個string + value_str = ".".join(value)+"." + driver.quit() + return date ,value_str + def read_pdf_nonfarm(month, year): pdf = pdfplumber.open(f"empsit_{month}_{year}.pdf") page = pdf.pages[0] @@ -184,7 +216,22 @@ def broadcast_all_pce(target:str,date_target:str): f"Now :{datetime.fromtimestamp(time.time())} , Spend time :{str(round(endtimee - startimee, 3))} s", "-1002033782195") broadcast_message(f"The above is the PCE for {target}","-1002033782195") - +def broadcast_pmi(date_target:str): + startimee = time.time() + driver = webdriver.Chrome(options=options) + driver, date, value = find_pmi(driver, date_target) + Up_date = date_target.capitalize() + while date != Up_date: + driver.refresh() + driver, date, value = find_pmi(driver, date_target) + broadcast_message(Up_date+" PMI Data", "-1002033782195") + broadcast_message(value, "-1002033782195") + endtimee = time.time() + broadcast_message( + f"Now :{datetime.fromtimestamp(time.time())} , Spend time :{str(round(endtimee - startimee, 3))} s", + "-1002033782195") + broadcast_message(f"The above is the PMI for {Up_date}","-1002033782195") + driver.quit() has_broadcasted = False def wrapper_function_cpi(target): @@ -202,25 +249,85 @@ def wrapper_function_fomc(target,date_target): result = broadcast_all_fomc(target,date_target=date_target) if result: has_broadcasted = True +def wrapper_function_non_farm(target): + global has_broadcasted + result = broadcast_all_non_farm(target) + if result: + has_broadcasted = True +def wrapper_function_pmi(target): + global has_broadcasted + result = broadcast_pmi(target) + if result: + has_broadcasted = True +def convert_to_utc(date_str, time_str): + local_tz = pytz.timezone('Asia/Taipei') + local_time = datetime.strptime(date_str + " " + time_str, "%Y/%m/%d %H:%M") + local_time = local_tz.localize(local_time) + utc_time = local_time.astimezone(pytz.utc) + return utc_time.strftime("%Y-%m-%d %H:%M") +def print_hello(text): + print("Hello") + print(text) +schedules = { + convert_to_utc("2024/05/09", "04:34"): {"function": print_hello, "args": ["May"]}, + convert_to_utc("2024/05/09", "04:35"): {"function": print_hello, "args": ["June"]}, + convert_to_utc("2024/06/12", "20:30"): {"function": wrapper_function_cpi, "args": ["June", "june-2024"]}, + convert_to_utc("2024/07/11", "20:30"): {"function": wrapper_function_cpi, "args": ["July", "july-2024"]}, + convert_to_utc("2024/08/14", "20:30"): {"function": wrapper_function_cpi, "args": ["August", "august-2024"]}, + convert_to_utc("2024/09/11", "20:30"): {"function": wrapper_function_cpi, "args": ["September", "september-2024"]}, + convert_to_utc("2024/10/10", "20:30"): {"function": wrapper_function_cpi, "args": ["October", "october-2024"]}, + convert_to_utc("2024/11/13", "21:30"): {"function": wrapper_function_cpi, "args": ["November", "november-2024"]}, + convert_to_utc("2024/12/11", "21:30"): {"function": wrapper_function_cpi, "args": ["December", "december-2024"]}, + convert_to_utc("2024/05/31", "20:30"): {"function": wrapper_function_pce, "args": ["May", "may-2024"]}, + convert_to_utc("2024/06/28", "20:30"): {"function": wrapper_function_pce, "args": ["June", "june-2024"]}, + convert_to_utc("2024/07/26", "20:30"): {"function": wrapper_function_pce, "args": ["July", "july-2024"]}, + convert_to_utc("2024/08/30", "20:30"): {"function": wrapper_function_pce, "args": ["August", "august-2024"]}, + convert_to_utc("2024/09/27", "20:30"): {"function": wrapper_function_pce, "args": ["September", "september-2024"]}, + convert_to_utc("2024/10/31", "20:30"): {"function": wrapper_function_pce, "args": ["October", "october-2024"]}, + convert_to_utc("2024/11/27", "21:30"): {"function": wrapper_function_pce, "args": ["November", "november-2024"]}, + convert_to_utc("2024/12/20", "21:30"): {"function": wrapper_function_pce, "args": ["December", "december-2024"]}, + convert_to_utc("2024/06/07", "20:30"): {"function": wrapper_function_non_farm, "args": ["June", "june-2024"]}, + convert_to_utc("2024/07/05", "20:30"): {"function": wrapper_function_non_farm, "args": ["July", "july-2024"]}, + convert_to_utc("2024/08/02", "20:30"): {"function": wrapper_function_non_farm, "args": ["August", "august-2024"]}, + convert_to_utc("2024/09/06", "20:30"): {"function": wrapper_function_non_farm, "args": ["September", "september-2024"]}, + convert_to_utc("2024/10/04", "20:30"): {"function": wrapper_function_non_farm, "args": ["October", "october-2024"]}, + convert_to_utc("2024/11/01", "20:30"): {"function": wrapper_function_non_farm, "args": ["November", "november-2024"]}, + convert_to_utc("2024/12/06", "21:30"): {"function": wrapper_function_non_farm, "args": ["December", "december-2024"]}, + convert_to_utc("2024/06/13", "02:00"): {"function": wrapper_function_fomc, "args": ["June", "20240613a"]}, + convert_to_utc("2024/08/01", "02:00"): {"function": wrapper_function_fomc, "args": ["August", "20240801a"]}, + convert_to_utc("2024/09/19", "02:00"): {"function": wrapper_function_fomc, "args": ["September", "20240919a"]}, + convert_to_utc("2024/11/08", "02:00"): {"function": wrapper_function_fomc, "args": ["November", "20241108a"]}, + convert_to_utc("2024/12/19", "03:00"): {"function": wrapper_function_fomc, "args": ["December", "20241219a"]}, +} if __name__ == "__main__": - global nonfarm_url , cpi_url , fomc_url , pce_url + global nonfarm_url, cpi_url, fomc_url, pce_url, options + options = Options() + options.add_argument('--headless') + options.add_argument('--no-sandbox') + options.add_argument('--disable-dev-shm-usage') + options.add_argument("--window-size=1920,1080") # 可以根據需要調整這個大小 + options.add_argument( + 'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3') nonfarm_url = "https://www.bls.gov/news.release/empsit.nr0.htm" cpi_url = "https://www.bls.gov/news.release/cpi.nr0.htm" fomc_url = "https://www.federalreserve.gov/newsevents/pressreleases/monetary" pce_url = "https://www.bea.gov/news/2024/personal-income-and-outlays-"#january-2024 - + pmi_url = "https://www.ismworld.org/supply-management-news-and-reports/reports/ism-report-on-business/pmi/"#+month/ + ''' print("Start Time:" , datetime.fromtimestamp(time.time())) schedule.every().day.at("10:44").do(wrapper_function_fomc, "March", "20240320a") - + for times, task in schedules.items(): + func = task["function"] + args = task["args"] + schedule.every().day.at(times.split(" ")[1]).do(func, *args) while True: - if datetime.now().strftime("%Y-%m-%d %H:%M") == "2024-05-01 23:32": - schedule.run_pending() + schedule.run_pending() if has_broadcasted: print("Broadcast completed") - break time.sleep(0.1) # Check every 0.1 seconds - + ''' + broadcast_pmi("april") #NonFarm # date , message = find_non_farm(nonfarm_url) # print(date)