Selenium == ### Basics: 先去下載selenium ``` pip install selenium ``` 然後下載chrome的web driver 有不同瀏覽器可以選firefox, safari, chrome等都可以,我先用chrome,然後找到自己chrome的版本下載相對應的web driver版本就可以了 在這裡下載:https://chromedriver.chromium.org/downloads 他會解壓縮出一個.exe檔案,然放進去python檔案同一個資料夾 在python檔案裡首先先import selenium ``` from selenium import webdriver ``` 從這裡可以獲得webdriver.exe 的絕對路徑,我是用mac直接copy路徑就好了,但是如果是用windows好像要在路徑的最後面加上.exe ![](https://i.imgur.com/SeWwz6I.png) 將他存入變數path ``` path = "....../chromedriver" driver = webdriver.Chrome(path) ``` webdriver有很多瀏覽器可以選firefox, safari, chrome, edge 然後可以用get()開啟新的chrome視窗,並開啟輸入的網站 ``` driver.get("https://google.com") ``` 輸入quit()就可以關閉視窗 ``` driver.quit() ``` ### 自動輸入文字 要先import By ``` from selenium.webdriver.common.by import By ``` 先去檢查該網站的原始碼,比如說google search的欄位,可以找到其中name="q"的資訊 ![](https://i.imgur.com/IjjT0TT.png) 版號 4.X 開始, find_element_by_XXX / find_elements_by_XXX 已經棄用,要改用 **find_element(By.XXX, 定位字串)** / **find_elements(By.XXX, 定位字串)** ``` search = driver.find_element_by_name("query") ``` 要改為 ``` search = driver.find_element(By.NAME, "query") # 如果程式碼未寫 from selenium.webdriver.common.by import By # 請將 By.NAME 改成 "name" # search = driver.find_element("name", "query") ``` 輸入要搜尋的字串,下一行按下enter,再加入clear()預防輸入欄位有預設或是多餘的字串 ``` search.clear() search.send_keys("狗") search.send_keys(Keys.RETURN) ``` ![](https://i.imgur.com/VH8xN42.png) ### 爬取網頁資料 在網頁打開檢查然後找到他的class name然後可以觀察每個class name應該都會有一樣的然後把資料抓下來 ``` titles = driver.find_elements(By.CLASS_NAME, "sc-417133b6-3") ``` 如果加上前面的search可能網也還沒跑完,指令就到了下一行,為了防止這發生可以使用WebDriverWait的指令,他等待結束的條件是登他獨到class name我這邊是寫"看板",或是你想設隨便一個在網頁一開頭的class,(driver, 10)是代表他會等10秒 ``` WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, "sc-f860e6e9-1")) ) ``` 使用一個forloop,便可以把擷取下來的標題都print下來 ``` for title in titles: print(title.text) ``` ### 常用網頁操作 回到上一頁back(),寫幾次回幾次 ``` driver.back() ``` 到下一頁forward() ``` driver.forward() ```