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

將他存入變數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"的資訊

版號 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)
```

### 爬取網頁資料
在網頁打開檢查然後找到他的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()
```