python+selenium爬取網站並截圖 屏蔽網站根據window.navigator.webdriver檢測模擬瀏覽器

# -*- 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()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章