一、前言
上次已經寫到可以自動登入並且找到按讚的按鈕去判斷要不要按讚,這次接著繼續寫,改寫成根據我們要按讚的標籤文章,自動去抓取最新貼文,而後取得url後,自動跳轉畫面,逐一檢查有沒有按讚過,完成一次循環。
【selenium】【實作】用Python來增加你的IG曝光度吧!(上):實戰教你瀏覽器控制!
二、改寫為自動找到網頁去點讚
一步一步看吧,完整程式碼這次放在最下面唷!這次的目的有3個:
a. 進去某個標籤(此範例為#語錄)
b. 找到最新貼文的url
c. 逐一檢查有沒有按過讚,沒有的話就按讚
最後我們關掉瀏覽器完成簡單的一次循環!
但其中有幾點必須注意的事情:
a. 要讓程式有停頓,不然會被網頁擋掉
b. 充分使用find_elements_by_class_name找到我要的資料位置,並用get_attribute抽出資料
(1) 為了躲過偵測使用import time套件
使用time.sleep(3)來讓我們程式這邊休息三秒鐘
import time
time.sleep(3) # 停頓3秒等網頁載入
(2) 使用find_elements_by_class_name方法
你會發現右鍵檢查,去查看放最新貼文的地方,都有套用Nnq7C這個class,
意思我們可以藉由找這class找到貼文位置,他會返回這網頁所有使用Nnq7C的地方裝在一個list裡面。
(3) 使用find_element_by_tag_name方法
你會發現網址放在更深一層a標籤裡面,我們使用find_element_by_tag_name('a')往下找,
而後再href屬性看到我們要的網址,也就是我們的目標,用get_attribute('href')抽出,後放到list裡面。
hashtag_url_list = [] # 等等放網址
for i in post:
# 在每個post找到標籤a後取得herf(網址)屬性
post_url = i.find_element_by_tag_name('a').get_attribute('href')
hashtag_url_list.append(post_url) # 放入網址
# 還不知道list怎麼用的可以參考:【Python基礎】資料量化必學的list用法 不會要吃虧喔:list用法全解析
完整程式碼
import os
import time
from selenium import webdriver# 還沒安裝就先 pip install selenium
# chromedriver路徑
path = os.path.join(os.getcwd(), 'chromedriver88.exe')
# 選定使用chromedriver
driver = webdriver.Chrome(path)
driver.implicitly_wait(10) # 等待頁面好 10秒內
# 打開瀏覽器
url = 'https://www.instagram.com/' # 目標網址 ig
# 打開網址
driver.get(url)
# 取得帳號位置
user_input = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[1]/div/label/input')
user_input.clear() # 清除原本裡面的東西確保乾淨
user_input.send_keys('填你的帳號') # 帳號
# 取得密碼位置
user_input = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[2]/div/label/input')
user_input.clear()
user_input.send_keys('填你的密碼') # 密碼
# 找到登入按鈕位置
login_button = driver.find_element_by_xpath('//*[@id="loginForm"]/div[1]/div[3]/button')
login_button.click() # 點一下
time.sleep(3) # 停頓3秒等網頁載入
# 找到hashtag為語錄的頁面
url_hashtag = 'https://www.instagram.com/explore/tags/%E8%AA%9E%E9%8C%84/'
driver.get(url_hashtag)
# 取得要按讚貼文網址
# 用find_elements_by_class_name找到放貼文地方
post = driver.find_elements_by_class_name('Nnq7C') # 最新貼文都套用Nnq7C這class
hashtag_url_list = [] # 等等放網址
for i in post:
# 在每個post找到標籤a後取得herf(網址)屬性
post_url = i.find_element_by_tag_name('a').get_attribute('href')
hashtag_url_list.append(post_url) # 放入網址
# 分別切換網頁去按讚
for url in hashtag_url_list:
driver.get(url)
driver.implicitly_wait(10)
# 找到按讚的按鈕
best_button = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/div[1]/article/div[3]/section[1]/span[1]/button')
t = best_button.find_element_by_class_name('_8-yf5') # 選到文字讚的那個class
t = t.get_attribute('aria-label') # 取出文字
# 檢驗是讚還是收回按 是讚就按下去
if t == '讚':
best_button.click() # 點讚
time.sleep(2) # 停頓一下以免被抓
# 關閉瀏覽器
driver.close()
print('完成第一輪按讚')
三、後記
這樣就大致上完成了,聰明的你可以想到用自動定時來啟動關閉,我們後續再來介紹吧!
【selenium】【實作】用Python來增加你的IG曝光度吧!(上):實戰教你瀏覽器控制!