-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathassignment01_scraper.py
More file actions
87 lines (64 loc) · 3.27 KB
/
Copy pathassignment01_scraper.py
File metadata and controls
87 lines (64 loc) · 3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import time
import os
def init_driver():
options = webdriver.ChromeOptions() # 設定 Chrome 瀏覽器的選項
options.add_argument('--start-maximized') # 啟動時最大化視窗
options.add_argument('--incognito') # 無痕模式
options.add_argument('--disable-popup-blocking') # 停用彈窗阻擋功能
options.add_experimental_option('excludeSwitches',['enable-automation']) # 移除 Chrome 被 Selenium 控制時的一些提示標記
options.add_experimental_option('useAutomationExtension',False) # 關閉 Selenium 自帶的自動化擴充功能。
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36') # 假裝自己是一般使用者
options.add_argument('disable-blink-features=AutomationControlled') # 避免被視為機器人
driver = webdriver.Chrome(options=options) # 這行跑完,會看到一個 Chrome 視窗彈出來
return driver
def open_url(driver, url):
driver.get(url)
print("Page Title:", driver.title)
# 點擊「免費閱讀」按鈕
button = driver.find_element(By.CSS_SELECTOR,'button.open-viewer.book-begin.ga')
button.click()
time.sleep(2)
# 切換到新開啟的標籤頁
driver.switch_to.window(driver.window_handles[-1])
# 點擊「立即閱讀」按鈕
read_now = driver.find_element(By.PARTIAL_LINK_TEXT,'すぐに読む')
read_now.click()
def get_manga_images(driver, folder_name='manga_images'):
if not os.path.exists(folder_name):
os.makedirs(folder_name)
print(f'已建立資料夾: {folder_name}')
wait_element = WebDriverWait(driver, 10)
total_image_count = 0
while True:
image_elements = driver.find_elements(By.CSS_SELECTOR,'div.page_image img.image')
for img_element in image_elements:
if img_element.is_displayed():
file_path = os.path.join(folder_name, f"manga_page_{total_image_count}.png")
img_element.screenshot(file_path)
print(f"成功擷取 {total_image_count} 頁並儲存為: {file_path}")
total_image_count += 1
try: # 嘗試尋找並點擊「下一頁」按鈕
next_page = wait_element.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'div.flip.flip-left')))
next_page.click() # 點擊下一頁按鈕
print("已點擊下一頁,等待畫面載入...")
time.sleep(2)
except TimeoutException: # Break Condition
print("【系統提示】找不到下一頁按鈕,已達最後一頁,結束爬取迴圈。")
break
if __name__ == "__main__":
mangaz_url = "https://www.mangaz.com/book/detail/157901"
my_driver = init_driver()
try:
open_url(my_driver, mangaz_url)
get_manga_images(my_driver)
except Exception as e:
print(f"發生錯誤: {e}")
finally:
print("程式即將關閉...")
time.sleep(5)
my_driver.quit()