前言
家中的家務小精靈會習慣到對岸的論壇簽到拿積分(積分可以買資源),為了幫小精靈減少每日任務負擔,所以想做個可以自動執行論壇的簽到功能,雖然腦海中想到的是插件Tampermonkey,但還是想嘗試看看使用其他方式來簽到,估狗了[python 自動簽到],大概整理了相關資料,一般論壇的登入方法有兩種方法 :
● 首次手動登入使用fiddle網路分析工具將cokeies資料保存下來,再使用爬蟲工具送訊息給論壇登入並且簽到,此方法可以繞過論壇登入時的驗證碼(這邊如果有說錯,麻煩留言糾正)。
● 使用selenium自動登入論壇,將寫定的動作在網頁上執行。
本次示範的論壇不需要登入驗證碼,所以我們會使用Selenium去執行自動簽到。
簽到的論壇:http://www.cgboo.com/
定位元素
browser.find_element_by_name("username")
browser.find_element_by_id("username_LRW6Z")
定位元素後的動作
像前面範例定位的元素是input text,我們可以在定位的程式碼後面加上.send_keys("內容"),selenium會再定位的元素自動輸入要指定的內容,像是定位元素是帳號那就是將內容改成躍登入的帳號,如果定位的元素是button,可以加上.click(),可以做出對指定的元素送出點擊的動作。
browser.find_element_by_name("username").send_keys("Account _ID")
browser.find_element_by_name('loginsubmit').click()
自動簽到程式碼
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
#使用chrome的webdriver
browser = webdriver.Chrome()
#開啟Login
browser.get('http://www.cgboo.com/member.php?mod=logging&action=login')
#將browser視窗放到最大
browser.maximize_window()
#自動填入帳號密碼再點擊登入Button
time.sleep(2)
browser.find_element_by_name("username").send_keys("Account _ID")
browser.find_element_by_name("password").send_keys("Password")
browser.find_element_by_name('loginsubmit').click()
#sleep去等待頁面載入,可以使用其他方式等待頁面載入完成
time.sleep(1)
#進簽到頁面
browser.find_element_by_id('mn_N462e').click()
try:
check = browser.find_element_by_id('fd')
except NoSuchElementException:
print("今日已簽到")
browser.find_element_by_id('fd').click()
browser.find_elements_by_xpath("//input[@name='qdmode' and @value='1']")[0].click()
browser.find_element_by_name("todaysay").send_keys("每天都要簽到啊!!!")
python_button1 = browser.find_element_by_xpath('//a[img/@src="source/plugin/dsu_paulsign/img/qdtb.gif"]')
python_button1.click()
time.sleep(1)
#自動關閉視窗
browser.quit();
結尾
對於selenium有更多的元素定位方法,可以參考下面網址
https://selenium-python-zh.readthedocs.io/en/latest/index.html
沒有留言:
張貼留言