用selenium模擬登陸知乎賬號,處理登陸介面隨機出現驗證碼視窗的問題
阿新 • • 發佈:2019-02-20
import requests
from selenium import webdriver
from bs4 import BeautifulSoup
import time
while True:
#option = webdriver.ChromeOptions()
#option.set_headless()
#因為要手動輸入驗證碼,所以無頭模式註釋掉
driver = webdriver.Chrome(r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
driver.get('http://www.zhihu.com' )
driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[2]/span').click()
driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[1]/div[2]/div[1]/input').send_keys('手機登陸賬號')
driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[2]/div/div[1]/input' ).send_keys('賬號密碼')
input('請檢視網頁是否要輸入驗證碼,如果有請手動輸入,輸入完請回車確認,沒有直接回車!')
driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/button').click()
time.sleep(5)#等待提交後介面載入
#因為有兩種驗證碼,故輸入提交後,對輸入後的兩種可能結果進行檢查,如果輸入驗證碼錯誤,程式繼續執行,提示重新登陸
try:
foo = driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[3]/div/div/div[2]' )
if foo.text == '請提交正確的驗證碼 :(':
print('您輸入的驗證碼錯誤,稍等後出現新的登陸,再確認!')
driver.quit()
continue
except:
pass
try:
foo = driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[3]/div/div[1]/span')
if foo.text == '請提交正確的驗證碼 :(':
print('您輸入的驗證碼錯誤,稍等後出現新的登陸,再確認!')
driver.quit()
continue
except:
pass
print('驗證碼輸入正確,已經成功登陸!')
cookies = driver.get_cookies()#儲存好登陸COOKIE後續網路爬蟲要用到
break
driver.quit()