這次我們來用selenium爬爬看Pixiv。
目標是登入後輸入pixiv ID並自動爬下該作者所有的圖片。
今天先來登入。
首先先把環境架設好,看你喜好用哪種遊覽器。
我這裡使用Firefox和geckodriver作為示範。
首先先用selenium打開看看登入頁面
driver = webdriver.Firefox()
print('login...')
driver.get("https://accounts.pixiv.net/login")
這裡print的用意是之後用headless跑的話會跑蠻常一段時間且沒有畫面可以看,有定時輸出進度會比較方便判斷問題在哪。
總之建議拿headless就多輸出下現在在幹嘛。
成功開啟登入頁面後可以看到下面的樣子
這次打算利用autocomplete = 'username'
來找到輸入格,密碼那格同理。
程式碼如下
account = driver.find_element(By.XPATH,"//input[@autocomplete = 'username']")
passwd = driver.find_element(By.XPATH,"//input[@autocomplete = 'current-password']")
account.send_keys('您的帳號')
passwd.send_keys('您的密碼')
passwd.send_keys(Keys.RETURN)
也就是定位出input
標籤下的autocomplete = 'username'
那個位置後把帳密透過send_keys
丟帳密上去。
最後再透過Keys.RETURN
來模擬按下enter的行為來登入。
這裡用到了DAY18提到的xpath。如果不懂可以再回去看看。
這裡有個小坑是登入後直接get下一個網址的話可能會因為太快跳掉所以被判定為登入失敗,所以我們要先等待他爬完。
我這邊選擇檢查右上角的小清單有沒有出現自己的username
碼掉的地方就是你pixiv的名子,等待的程式碼如下:
WebDriverWait(driver, 15).until(lambda driver: driver.find_element(By.XPATH,"//div[@title='"+'你的名子'+"']"))
接著把程式碼併起來應該就能動了。
偶爾登入會被recapcha卡住,所以不要短時間試太多次比較好。