# -*- encoding:utf-8 -*-
import os
import traceback
from selenium import webdriver
from selenium.webdriver import ChromeOptions
import time
from threading import Thread
from config import *
from loguru import logger
chrome_driver = 'chromedriver.exe'
@logger.catch()
def passes(name, num):
logger.add(os.getcwd() + '\\log\\' + '{time}.log', encoding="utf-8", rotation="00:00", retention='1 days')
logger.debug('--------------開始執行------------------')
option = ChromeOptions()
# 屏蔽網站根據window.navigator.webdriver檢測模擬瀏覽器
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = webdriver.Chrome(executable_path=chrome_driver, options=option)
PASS_URL = 'https://www.*****' + num
driver.get(PASS_URL)
try:
all_pass_btn = driver.find_element_by_id('*****')
if all_pass_btn.is_enabled():
all_pass_btn.click()
get_elements(name, driver)
else:
close_add(driver)
all_pass_btn.click()
get_elements(driver)
except:
traceback.print_exc()
@logger.catch()
def get_elements(name, driver):
elements = driver.find_elements_by_xpath('//*[@id="****"]/tbody/tr')
for element in elements:
print(element.text)
if date in element.text:
get_map_element(name, driver, element)
print('next')
time.sleep(3)
@logger.catch()
def get_map_element(name, driver, element):
if element.is_enabled():
element.click()
else:
close_add(driver)
element.click()
map = driver.find_element_by_class_name('*****')
time.sleep(4)
zoom_out_btn = driver.find_element_by_xpath('*******')
if zoom_out_btn.is_enabled():
zoom_out_btn.click()
else:
close_add(driver)
zoom_out_btn.click()
time.sleep(4)
screenshot_name = "Screenshots\\"+name + element.text[0:12] + '.png'
logger.debug(screenshot_name.replace(':', '-'))
map.screenshot(screenshot_name.replace(':', '-'))
close_map = driver.find_element_by_css_selector(
'#basic-modal-content > div > div.modal-footer > button:nth-child(2)')
if close_map.is_enabled():
close_map.click()
else:
close_add(driver)
close_map.click()
time.sleep(4)
if __name__ == "__main__":
data = NUM
# 構建線程
threads = []
for name, num in data.items():
t = Thread(target=passes, args=(name, num))
threads.append(t)
# 啓動所有線程
for thr in threads:
time.sleep(2)
thr.start()