Introduction to Python Applications 2025 - Selenium
===
###### tags: `Python` `Python and Its Application 2025`
## 網頁的構成
1. **HTML (HyperText Markup Language - 超文本標記語言):房子的結構**
* **用途:** HTML 是網頁的骨架,負責定義網頁的內容和結構。它會告訴瀏覽器網頁上有哪些元素,例如標題、段落、圖片、連結、列表等等。
* **比喻:** 就像蓋房子時的鋼筋水泥、樑柱和牆壁,HTML 搭建起網頁的基本框架。它決定了「這裡是一個標題」、「那裡是一段文字」、「這是一張圖片」。
* **範例:**
```html
<!DOCTYPE html>
<html>
<head>
<title>我的網頁</title>
</head>
<body>
<h1>歡迎來到我的網站</h1>
<p>這是一個介紹 HTML、CSS 和 JavaScript 的段落。</p>
<img src="image.jpg" alt="示意圖">
<a href="#">點擊這裡</a>
</body>
</html>
```
2. **CSS (Cascading Style Sheets - 層疊樣式表):房子的裝潢和外觀**
* **用途:** CSS 負責網頁的視覺呈現和排版。它用來控制 HTML 元素的樣式,例如顏色、字體、大小、間距、背景、位置等等。
* **比喻:** 如果 HTML 是房子的結構,那麼 CSS 就是油漆、壁紙、家具、燈飾和室內設計。它讓網頁看起來更美觀、更易於閱讀。
* **範例 (通常寫在 `<style>` 標籤內或獨立的 `.css` 檔案):**
```css
body {
font-family: Arial, sans-serif; /* 設定字體 */
background-color: #f0f0f0; /* 設定背景顏色 */
}
h1 {
color: navy; /* 設定標題顏色 */
text-align: center; /* 設定標題置中 */
}
p {
font-size: 16px; /* 設定段落文字大小 */
line-height: 1.6; /* 設定行高 */
}
img {
display: block; /* 讓圖片獨占一行 */
margin: 0 auto; /* 讓圖片水平置中 */
width: 50%; /* 設定圖片寬度 */
}
```
3. **JavaScript (JS):房子的互動功能和動態效果**
* **用途:** JavaScript 為網頁添加互動性和動態功能。它可以讓網頁對使用者的操作做出反應,例如點擊按鈕、提交表單、播放動畫、更新內容等等。
* **比喻:** JavaScript 就像房子裡的電器、門鈴、自動門、電燈開關等等。它讓網頁「活」起來,不再只是靜態的展示。
* **範例 (通常寫在 `<script>` 標籤內或獨立的 `.js` 檔案):**
```javascript
// 假設 HTML 中有一個按鈕 <button id="myButton">點我</button>
// 和一個段落 <p id="myParagraph"></p>
let button = document.getElementById("myButton");
let paragraph = document.getElementById("myParagraph");
button.addEventListener("click", function() {
paragraph.textContent = "按鈕被點擊了!"; // 點擊按鈕後改變段落文字
});
```
**它們如何協同工作?**
想像一下瀏覽器載入一個網頁的過程:
1. **瀏覽器首先讀取 HTML 檔案。** 這就像建築工人先看設計藍圖,了解房子的基本結構,知道哪裡是客廳、哪裡是臥室。
2. **接著,瀏覽器根據 HTML 結構,套用 CSS 樣式。** 這就像裝潢工人開始粉刷牆壁、鋪設地板、擺放家具,讓房子有了美觀的外觀。
3. **最後,瀏覽器執行 JavaScript 程式碼。** 這就像接通電源,讓房子裡的電器和互動裝置開始運作。使用者可以開燈、按門鈴,網頁也可以根據使用者的操作產生變化。
**總結來說:**
* **HTML** 提供**內容**和**結構**。
* **CSS** 提供**樣式**和**外觀**。
* **JavaScript** 提供**互動性**和**功能**。
這三者相輔相成,缺一不可,共同構成了我們每天在網路上看到的豐富多彩、功能強大的網頁。學習網頁開發,通常也是從這三門技術開始入手。
## HTML
**HTML(HyperText Markup Language)** 是用來建立網頁的**標記語言**,用來描述**網頁的結構與內容**,例如標題、段落、圖片、表單等等。
* HTML 不是程式語言,而是一種**結構標記語言**
* 瀏覽器負責「解譯」HTML 並顯示給使用者
## 為何需要 Selenium
`requests` 可以取得網頁原始碼,即 html 的部分,也可以利用 BeautifulSoup 等工具進行分析,但是 `requests` 本體並沒有提供 JavaScript 執行的環境,因此能夠直接使用真正的瀏覽器來開啟網頁的 Selenium,才能夠做到執行 JavaScript 並在正確顯示的網頁上取得資料。
## HTML5 基礎結構
HTML5 是最新版本,支援更多語義化標籤與多媒體功能。
### 一個完整的 HTML5 範例:
```html
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<title>我的第一個網頁</title>
</head>
<body>
<h1>你好,世界!</h1>
<p>這是一個用 HTML5 撰寫的網頁。</p>
</body>
</html>
```
### 📌 各部分說明:
| 區塊 | 說明 |
| ------------------------ | -------------------------- |
| `<!DOCTYPE html>` | 宣告這是 HTML5 文件 |
| `<html lang="zh-Hant">` | 整個 HTML 文件開始,`lang` 屬性定義語言 |
| `<head>` | 頭部區塊(放網頁資訊、CSS、Meta、標題等) |
| `<meta charset="UTF-8">` | 定義編碼,支援繁體中文 |
| `<title>` | 網頁標題(會顯示在瀏覽器分頁) |
| `<body>` | 內容區塊,顯示在網頁畫面上的部分 |
### 語法相關名詞
- Tag: 通常有**開始與結束** `<p>內容</p>`,但部分標籤是**單標籤(自閉合)**:如 `<img />`、`<br />`。
- Type: `<p>這是一個用 HTML5 撰寫的網頁。</p>` 的 `p` 就是 Type。
- Attribute: `<html lang="zh-Hant">` 中的 `lang` 就是 Attribute。
- Text: `<p>這是一個用 HTML5 撰寫的網頁。</p>` 中的「這是一個用 HTML5 撰寫的網頁。」就是 Text。
## 常用 HTML 標籤與範例
### 標題與段落
```html
<h1>主標題</h1>
<h2>副標題</h2>
<p>這是一段文字。</p>
```
* `<h1>`\~`<h6>`:標題,數字越小越重要
* `<p>`:段落
### 連結與圖片
```html
<a href="https://www.google.com">前往 Google</a>
<img src="https://via.placeholder.com/150" alt="範例圖片">
```
* `<a href="URL">文字</a>`:超連結
* `<img src="圖片網址" alt="替代文字">`:圖片(`alt` 是無法顯示時的替代描述)
### 清單
```html
<ul>
<li>無序項目 1</li>
<li>無序項目 2</li>
</ul>
<ol>
<li>有序項目 1</li>
<li>有序項目 2</li>
</ol>
```
* `<ul>`:無序清單(圓點)
* `<ol>`:有序清單(數字)
* `<li>`:清單項目
### 表格
```html
<table border="1">
<tr>
<th>姓名</th>
<th>年齡</th>
</tr>
<tr>
<td>小明</td>
<td>18</td>
</tr>
</table>
```
* `<table>`:表格
* `<tr>`:列
* `<td>`:儲存格(資料格)
* `<th>`:標題格(加粗置中)
### 表單元件(輸入)
```html
<form>
姓名:<input type="text" name="name"><br>
信箱:<input type="email" name="email"><br>
<button type="submit">送出</button>
</form>
```
* `<form>`:表單區塊
* `<input>`:輸入欄位(`type` 決定型態)
* `<button>`:按鈕
## CSS 基礎
* CSS 是什麼?
* Cascading Style Sheets
* 設計、美化、排版 HTML 元素的工具
* CSS 導入方式
* inline style: `<p style="color:red">`(不推薦)
* internal: `<style>` 安裝在 `<head>`
* external: 外部 CSS 檔案
### 常用 CSS 選擇器
選擇器(Selector)用來「選取」HTML 中的元素,然後套用樣式。以下是常見的類型:
| 選擇器 | 說明 | 範例 |
| -------------- | ------------------- | ------------------------------------ |
| 標籤選擇器 | 選取所有該 HTML 標籤元素 | `h1 { color: red; }` |
| 類別選擇器 `.class` | 選取 class 屬性為指定名稱的元素 | `.title { font-size: 24px; }` |
| ID 選擇器 `#id` | 選取具有特定 id 的元素 | `#header { background: gray; }` |
| 群組選擇器 | 一次選取多個元素 | `h1, h2, p { margin-bottom: 10px; }` |
| 後代選擇器 | 選取某元素內的某種子元素 | `ul li { list-style: square; }` |
_ 還有更多選擇器,但我們先跳過。
### 基礎樣式屬性
* `color`, `background-color`
* `font-family`, `font-size`
* `padding`, `margin`, `border`
* `text-align`, `display`, `flex`
## 練習範例檔案
檔案組合:
```
lesson-demo/
├── index.html
├── style.css
└── script.js
```
**index.html**
```html
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<title>我的個人網頁</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>我是學習者</h1>
<p>我喜歡網頁開發。</p>
<img src="https://via.placeholder.com/150" alt="avatar">
<p><a href="https://www.google.com">Google 網址</a></p>
<button id="countBtn">點我!</button>
<p>點擊次數:<span id="counter">0</span></p>
<script src="script.js"></script>
</body>
</html>
```
**style.css**
```css
body {
font-family: Arial, sans-serif;
background-color: #f5f5f5;
padding: 20px;
text-align: center;
}
h1 {
color: #2c3e50;
}
img {
border-radius: 50%;
margin: 10px 0;
}
button {
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
background-color: #3498db;
color: white;
border: none;
border-radius: 5px;
}
```
**script.js**
```javascript
let count = 0;
document.querySelector('#countBtn').addEventListener('click', () => {
count++;
document.querySelector('#counter').textContent = count;
});
```
## [Selenium with Python](https://selenium-python.readthedocs.io/)