Python
之前和一群轉職仔工程師組了CS50讀書會
摸了一下python,覺得自動化真的是很迷人
把繁瑣的事情都交給機器人去自動處理
我們就能釋放更多高產值耍廢的時間
於是我打算來寫一個搶票機器人
爬文研究一下,需要安裝兩個東西
ChromeDriver + Selenium
ChromeDriver下載連結
記得要安裝與Chrome相同版本
Selenium在terminal上輸入以下指令就可以
pip install selenium
開一個.py檔
最上頭輸入
from selenium import webdriver
driver = webdriver.Chrome('存放ChromeDriver的本地位置')
driver.get('要去的頁面網址')
以KKTIX為例,我們要做的就是把和頁面互動的點擊事件
變成自動化的流程
用Chrome打開KKTIX頁面,進入開發人員工具
點擊左上角的滑鼠按鈕
它會顯示你所移動到的元件對應的HTML
Learn More →
再對那行對應的HTML按右鍵 > Copy > Copy XPath
Learn More →
driver.find_element(by=By.XPATH, value="貼上XPath"]").click()
就完成自動點選了
進入登入頁面,要自動填入資料的話
只要按下面的程式碼操作即可
account = driver.find_element(by=By.XPATH, value="//*[@id=\"user_login\"]")
account.clear()
account.send_keys("你的帳號")
password = driver.find_element(by=By.XPATH, value="//*[@id=\"user_password\"]")
password.clear()
password.send_keys("你的密碼")
如果遇到畫面元件還沒載入完成,就進行操作的話
會報出"Unable to locate element"的錯誤
這時候到上方import
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
然後在執行時輸入time out時間
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "XPath"))).click()
如果是要條件達成(例如選好票種和同意條款)才能點選按鈕的話
調用下面的api
nextStepBtn = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "XPath")))
nextStepBtn.click()
下拉選單選擇日期的操作
可以選擇透過id、class name或name拿到element
expMonth = Select(driver.find_element_by_name(name="名稱"))
expMonth.select_by_visible_text('07')
expYear = Select(driver.find_element_by_name(name="名稱"))
expYear.select_by_visible_text('2046')
大致上的操作就是這樣
不過實際操作時,會遇到Google驗證的問題
目前還沒找到方法繞過reCAPTCHA
我的折衷辦法是在VS裝IPython
複製貼上reCAPTCHA前的指令,在驗證那關人工手動操作
再貼上後面輸入資訊、付款方式的程式碼
所以基本上仍是個半殘機器人
不過已經省去了很多時間
之後有空再繼續研究
先聲明,加密貨幣屬高風險投資,這個專案單純出自個人興趣 為了練Python隨手寫寫的side project 不構成任何投資建議,裡面投入的資金也是我賠光都無所謂的零用錢 要投資加密貨幣務必DYOR 我先前操作FTX pro放貸功能時 一直很好奇,為什麼他們沒有開啟複利再投入的功能 網路上爬一下文,看到很多人寫了機器人 身為工程師當然也要自己做一個
Apr 3, 2022iOS10起,在UITableView和UICollectionView提供了Prefetching的API 讓你在cellForRow之前就預先開始執行異步任務 也就是說,還沒出現在螢幕上但即將出現的cell 就會被觸發執行 注意: 一開始未捲動時,螢幕中可見的cell並不會觸發preFetch 當開始捲動後,觸發preFetch,indexPaths大約包含可視區外7-10個cell的數量
Mar 18, 2022前公司專案的架構是用MVVM-C,在新增一個分頁時,通常要新增Model、View Model、View Controller和Coordinator。比如LoginModel、LoginViewModel...之類,而這些檔案的內容格式其實大同小異,如果每次都要從舊有的檔案複製貼上,實在是很浪費時間。 因此,把常用的程式碼建成模板,之後新增檔案就會變得輕鬆愉快 Xcode的Templates放在/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates路徑底下 我們在這新增一個MVVMC.xctemplate的資料夾 要新增模板,需要創建兩樣東西
Mar 9, 2022你可以在許多情境裡使用where,對型別進行限制,從而讓程式碼更簡潔。 extension 當陣列中的元素是UIColor時,才可以調用toCgColors函式,將UIColor轉換為CGColor extension Array where Element == UIColor { func toCgColors() -> [CGColor] { var cgColors: [CGColor] = [] for color in self { cgColors.append(color.cgColor)
Mar 2, 2022or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up