跟著IG潮流來爬蟲-用Selenium帶您自動登入 IG -系列1(附Python程式碼)

You-Zhi
Marketingdatascience
8 min readOct 16, 2020

歡迎來到 Selenium動態網頁爬蟲系列文章
使用 Selenium自動登入 Instagram

今天你 “ IG ”了嗎?
先看圖再看文,讓Instagram成為時下年輕人最喜愛,也是最流行的社群交流平台。大家習慣用圖片記錄生活,用圖片吸引消費者的第一目光。IG有豐富的照片、文情並茂的篇章、熱絡討論的留言區。人潮帶來錢潮,資料帶來商機,數據分析師可以從大量的資料中,找到有價值的資訊,用來分析最新的趨勢!

但進入IG爬取資料前,還得先登入,今日要跟大家分享如何一鍵快速登入Instagram。

爬取 Instagram 內容前,還要手動登入帳號是否覺得很困擾呢?
想要一鍵成功爬下 Instagram 豐富的內容嗎?

那你千萬不能錯過這個環節!
有了這樣的功能,能讓爬蟲的過程更加地順暢喔!

接下來就要跟大家分享如何一鍵就能快速登入Instagram

先帶大家看一下成果畫面吧~

Selenium 必備技能-網頁檢視器概念說明

首先,我們把網頁檢視器打開
Windows系統:請按F12或者是ctrl + shift +iMacOS系統:請按option+command+c)可以看到以下畫面(圖一)

(圖一)網頁檢視器畫面

點擊彈出視窗上方的Elements,可以檢視網站元素。(圖二)

(圖二)點擊彈出視窗上方的Elements

到Elements的畫面後,可以點擊彈出視窗左上角的小鼠標。(圖三)

(圖三)點擊彈出視窗左上角的小鼠標

點完小鼠標後,此時我們在網頁任意滑動時,旁邊的「藍底區塊」將會跟著移動。(圖四)
大家一定會好奇「藍底區塊」是甚麼呢?
這裡的藍色區塊即是對應著「鼠標指著的區塊」的網頁元素,可以再仔細看看下面的動態圖檔,就會發現藍色區塊其實一直跟著鼠標的移動,出現了多次大小的藍色區塊。

(圖四)小鼠標功能顯示

以上的簡單概念,是否都清楚了呢?
看似簡單的過程,但在之後的操作,可是會不停地派上用場。登入之後,接下來我們就帶大家進入實戰階段了!

接下來,就來看看如何在網頁上快速登入instagram吧!

先來查看網頁元素

我們點擊小鼠標功能後,將鼠標移到大家常常輸入的「帳號」欄位上,就可以得到「帳號」的網頁元素。(圖五)

(圖五)得到帳號區塊的網頁元素

將網頁元素放大來檢視,可以看到帳號區塊的元素中有name的標籤!(圖六)

(圖六)帳號區塊的元素

那密碼的區塊呢?
密碼區塊元素的name標籤,也可以用以上相同方法找到!(圖七)

(圖七)帳號、密碼區塊的網頁元素

再來,按照前面得到網頁元素步驟執行之後,我們來查看「登入」區塊的網頁元素,可以發現到區塊內的元素數量少而且看起來的排序似乎很亂。(圖八)

遇到這樣的情況莫急莫慌莫害怕,後續我們會跟大家分享該如何處理!

(圖八)「登入」區塊的網頁元素

在開啟新的瀏覽器登入 Instagram 後,必會遇到「儲存你的登入資料」和「開啟通知」兩個頁面,在這邊我們在兩個頁面都選擇點選「稍後再說」的按鈕。此時,當我們查看按鈕的區塊元素時,也會遇到元素內容少跟排序亂的問題(圖九)。稍安勿躁,解決方法即將在後續揭曉!(圖九)

(圖九)「稍後再說」按鈕(儲存登入資料以及開啟通知)

「稍後再說」區塊的元素(儲存登入資料以及開啟通知)(圖十)

(圖十)稍後再說區塊的元素(儲存登入資料以及開啟通知)

看完網頁元素之後,是否覺得有些複雜呢?
不用擔心!只要跟著下面的步驟相信各位一定可以成功的。

現在就開始進入Selenium的階段囉!

一開始,我們先import所需要的套件。

接下來的步驟會分成三個階段說明:

1. 自動填入帳號密碼,且點擊登入
2. 點擊「稍後再說」(儲存登入資料)
3. 點擊「稍後再說」(開啟通知)

1.自動填入帳號密碼,且點擊登入

1-1. 透過Chromedriver 開啟網頁

若想知道Chromedriver 是如何運作的朋友們,請點以下連結~

  1. 動態網頁爬蟲第一道鎖 — Selenium教學:如何使用Webdriver、send_keys(附Python 程式碼)
  2. 動態網頁爬蟲第二道鎖 — Selenium教學:如何使用find_element(s)取得網頁元素(附Python 程式碼)

1-2. 前往Instagram 登入頁面

url = 'https://www.instagram.com/'browser.get(url)

url就是Instagram登入的網址,使用browser.get(url)可以讓webdriver前往該網頁,進行後續登入的相關動作。

1-3. 等待區塊的出現(NAME、XPATH)

  • (1)WebDriverWait(browser,30).until(EC.presence_of_element_located((By.NAME, ‘username’ )))
  • (2)WebDriverWait(browser,30).until(EC.presence_of_element_located((By.XPATH, ‘XPATH路徑’ )))

這邊的功能是等到區塊的出現之後才做「填入帳號密碼」與「點擊登入按鈕」的動作,若少了這個步驟很有可能會因為找不到可以輸入或點擊的地方而發生錯誤。因此,請大家不要忘了此「等待」的步驟。

相信聰明的大家在1-3 (1)的式子中發現了熟悉的 ‘username’了吧~
沒錯!這個就是出現在前面網站元素中的name = ‘username’,這個name就是用在這邊使用的!

那再回頭來看1-3(2)的式子中有一個 ‘XPATH路徑’ ,這個就是要來解決前面網站元素很少很亂的情況!
可以對著「該區塊網站元素」點擊右鍵,清單中有一個‘Copy’的選項,該選項中再選擇‘Copy Xpath’,就能複製到該區塊元素的XPATH路徑了!(可以參考下方動畫-圖十一

(圖十一)複製到該區塊元素的XPATH路徑(此例為登入按鈕)

1-4 找到各個區塊元素並對該區塊執行動作

(1)找到帳號區塊,命名為username_input,且使用send_keys()自動輸入「帳號」
username_input = browser.find_elements_by_name(‘username’)[0]
username_input.send_keys("您的帳號")
(2)找到登入區塊,命名為login_click,且使用click()自動點擊「登入」按鈕
login_click = browser.find_elements_by_xpath('登入區塊的XPATH路徑')[0]
login_click.click()

2. 點擊「稍後再說」(儲存登入資料視窗)

(1)找到稍後再說區塊,命名為store_click,且使用click()自動點擊「稍後再說」按鈕
store_click = browser.find_elements_by_xpath('稍後再說區塊的XPATH路徑')[0]
store_click.click()

3. 點擊「稍後再說」(開啟通知視窗)

(1)找到稍後再說區塊,命名為notification_click,且使用click()自動點擊「稍後再說」按鈕
notification_click = browser.find_elements_by_xpath('稍後再說區塊的XPATH路徑')[0]
notification_click.click()

以上的步驟就是使用Selenium快速自動登入Instagram帳號的步驟!用Seleniun自動登入的方式,會省下您爬蟲的許多時間,也會讓你的爬蟲程式更聰明~

Thinking smarter makes you work smarter!
本篇完整的程式碼在此

如果你喜歡我的文章的話,請給我一點拍手~
如果你覺得喜歡又實用的話,請給我更多的拍手!

作者:張友志(臺灣行銷研究特邀作者)、鍾皓軒(臺灣行銷研究有限公司創辦人)

--

--