iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0
Python

Python大戰之網頁爬蟲系列 第 17

[Day 17] 爬蟲工具 – Selenium實作-2

  • 分享至 

  • xImage
  •  

在今天我會針對Selenium做第二個相關的實作:

我會將FB作為我的範例app,並試著透過Selenium的自動輸入方式進行自動登入。
(範例程式碼部分參考
https://medium.com/@kenAaa/%E5%AF%A6%E4%BD%9Cpython%E8%87%89%E6%9B%B8%E8%87%AA%E5%8B%95%E7%99%BB%E5%85%A5-c82c8f450f6e )

在最後我也會對我這幾天的學習做出一個總結。
那就開始今天的Selenium實作了。

實作時間:

因為昨天其實講過很多相關的語法了,所以今天我會減少一點文字解釋,
只對於那些跟昨天方法不一樣的做解釋,那有興趣的
可以去看我昨天前天的文章,這邊就不拖台錢了,
先來看看今天完整的程式碼:
https://ithelp.ithome.com.tw/upload/images/20241001/20169196V7n4V84O9M.png

那以下,我就來針對跟昨天不一樣的以及沒有使用過的方法來進行解釋:

from selenium.webdriver.chrome.service import Service:

首先,我們就是要來講講昨天沒有應用到的 “service” ,
它能夠在程式碼中起到什麼功用:

Service作用?

Service類是在Selenium 中的一個工具,
用來管理像是 ChromeDriver 這樣的瀏覽器驅動的後台運行

每當你用 Selenium 打開瀏覽器,瀏覽器驅動器會在後台默默地運行,
而 Service 就是要負責啟動和控制這個驅動器的運行狀態
如此讓你不需要手動去啟動或停止 ChromeDriver。

from webdriver_manager.chrome import ChromeDriverManager:

ChromeDriverManager 則是一個很方便的工具,
它主要用於自動管理和下載正確版本的 ChromeDriver

通常,Chrome 瀏覽器都會定期做版本的更新,而跟它
配套的 ChromeDriver 也需要做出相應得更新。

而如果手動下載或更新 ChromeDriver,又或是沒有
開啟自動下載更新,情況就可能變得繁瑣且容易出錯。

ChromeDriverManager 就是可以幫助你
自動下載與你本地瀏覽器版本匹配的 ChromeDriver的一個工具,
讓你可以省去手動管理的麻煩事,減少負擔。

driver = (webdriver.Chrome
(service = Service(ChromeDriverManager().install()), options = option))
:

先講這一整行的作用是什麼好了:它的目的主要就是為了這行程式碼通過
webdriver.Chrome 來打開 Chrome 瀏覽器,
並確保使用的是與 Chrome 瀏覽器版本匹配的驅動程式。

那以下我再來對程式碼分行解釋:

webdriver.Chrome

這是用來創建一個 Chrome 瀏覽器實例的函數。
service=Service(ChromeDriverManager().install()):
這部分指定了要使用的瀏覽器驅動服務,也就是安裝正確的程式版本

ChromeDriverManager().install()

這就是上述所提到的,會自動下載並安裝正確的 ChromeDriver
(通過 ChromeDriverManager 工具來實現)。

Service()

啟動這個 ChromeDriver,並將其作為服務來管理,以保證驅動器正常運行。

options=option

這部分則是用來傳遞 Chrome 瀏覽器的配置選項,例如是否開啟無頭模式、禁用通知等。

總結來說,這行程式碼通過 webdriver.Chrome
來打開 Chrome 瀏覽器,並確保使用的是與 Chrome 瀏覽器版本
匹配的驅動程式。而在運行期間,瀏覽器配置(如是否開啟特定模式)
也可以通過 options 來靈活設定

driver.find_element(By.CSS_SELECTOR, 'input[name="email"]').send_keys(account):

因為這邊三行的運作模式都是一樣的,所以我就挑其中的一行出來講。
這邊跟我們所撰寫的上一篇程式有著明顯的區別,也就是所調用的方法不同。

在上一份實作中,我們是使用By.Name去搜索所想要選取的物件,
並查詢它在HTML中的表示方法(有興趣的可以看昨天的文章)。

而在今天,我們則是使用了「CSS選擇器」作為我們調用物件的方法。

那「CSS選擇器」有什麼不一樣呢?相較於前面只能
依靠現有元素來使用的方法,CSS明顯是一個更靈活的工具。

它適合對結構複雜的頁面進行精確定位,特別是當你需要
根據多個條件來選擇元素時。它適用於幾乎所有情況,
因為它可以根據元素的標籤、類別、屬性等多種條件來選擇。

而在這邊,我們就是利用它的id功能,直接查找到
HTML 頁面中 name="email"input標籤(即輸入電子郵件地址的欄位),
並將 account 變數中的內容(你的帳號)填入該欄位,
就直接完成我們的需求了。

在講述完這些不一樣的改動後,下方就是所呈現出的結果:

https://ithelp.ithome.com.tw/upload/images/20241001/20169196DFioJbgbI2.pnghttps://ithelp.ithome.com.tw/upload/images/20241001/20169196GZ3Zt6nyGE.pnghttps://ithelp.ithome.com.tw/upload/images/20241001/20169196UBs2r7F5Ce.png

最後就可以在下方得到我們想要的結果,也就是自動登入自己的FB帳號。
(以上三張圖都是由系統自動進行的動作,並不是手動操作,但由於無法上傳影片,故改以截圖方式呈現。)


小結:

在這幾天的Selenium學習中,我對於相關的操作以及概念都有了一些進步,
其實之前我是完全不知道Selenium是什麼東西的,
但透過這次的學習,真的讓我發掘到了一個如此好用的程式,
甚至現在已經可以爬取想要的資料了,這絕對是我之前想都不敢想的事。

參考資料:
https://developer.mozilla.org/zh-CN/docs/Web/CSS/ID_selectors
https://medium.com/@kenAaa/%E5%AF%A6%E4%BD%9Cpython%E8%87%89%E6%9B%B8%E8%87%AA%E5%8B%95%E7%99%BB%E5%85%A5-c82c8f450f6e


上一篇
[Day 16] 爬蟲工具 – Selenium實作
下一篇
[Day 18] BeautifulSoup
系列文
Python大戰之網頁爬蟲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言