利用Python與selenium自動化模擬登陸12306官網!

前言:

近年來,12306的反爬越來越來嚴重,從一年前的 獲取tk參數後到現在增加了 JS、CSS等加密方式!

目前大部分人利用的登陸方式都是利用selenium ,此文也不例外。

環境:

Windows

  python 3.6.5

模塊:

selenium

  pyautogui

time

第一步:

  實例化一款瀏覽器,並進入到12306官網

利用Python與selenium自動化模擬登陸12306官網!

<code>driver = webdriver.Chrome()
driver.get('https://kyfw.12306.cn/otn/resources/login.html')
driver.implicitly_wait(10)
driver.maximize_window()/<code>

第二步:

點擊賬號登陸

<code>driver.find_element_by_xpath('//*[@id="J-userName"]').send_keys('123456')
driver.find_element_by_xpath('//*[@id="J-password"]').send_keys('123456')/<code>
利用Python與selenium自動化模擬登陸12306官網!

第三步:

  在輸入框中,模擬輸入賬號密碼:

<code>driver.find_element_by_xpath('//*[@id="J-userName"]').send_keys('123456')
driver.find_element_by_xpath('//*[@id="J-password"]').send_keys('123456')/<code>
利用Python與selenium自動化模擬登陸12306官網!

第四步:

  當賬號密碼輸入完畢後,我們應該要做的就是 模擬點擊驗證碼圖片了!

那麼首先把圖片下載下來:

<code>yzm_code = driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[1]/div[2]/div[3]/div')
yzm_code.screenshot('yzm.png')/<code>

利用Python與selenium自動化模擬登陸12306官網!


第五步:

  

驗證碼下載下來後就可以為所欲為了,不管是對接打碼平臺也好,自己訓練模型,或者利用代碼模擬點擊也是可以的!

前面兩種方法根本沒法講,所以這裡採用第三種方式,進行模擬點擊。

  在這裡 說說我們需要達到的效果,驗證碼上總共有8張圖,那麼我想達到的效果就是我輸入1,2,3那麼程序自動點擊1,2,3三張圖片。

  所以我們先獲取到每個圖片的中心點座標,這裡是有規律的,聰明人肯定一看就懂了。

  我這裡這個是隨便寫的:

<code>code = input('請輸入驗證碼:')
time.sleep(5)
point_map = {
'1': '40,45',
'2': '116,53',
'4': '257,50',
'5': '40,121',
'6': '116,133',
'3': '185,52',
'7': '185,132',
'8': '257,130'}/<code>
<code>def get_point(indexs):
indexs = indexs.split(',')
temp = []
for index in indexs:
temp.append(point_map[index])
print(temp)
return temp


temp = get_point(code)/<code>

這兩串代碼就不解釋了,很基礎的東西。最終的效果就是 輸入1,2 那麼得到的是一個列表:

[ '40,45','116,53']

記住,這個座標只是 驗證碼圖片上的座標,不是整個屏幕的全局座標!!!!

那麼如何取全局座標?驗證碼頂點(1206,428)+驗證碼的座標,即全局座標!這裡的 (1206,428)請自行測試!

利用Python與selenium自動化模擬登陸12306官網!

第六步:

  模擬點擊,利用到pyautogui這個模塊。切記,利用此模塊前一定要加延遲進行畫面切換。

  (此文只做方法學習,並沒有任何其它意思,正常情況都是對接打碼平臺!希望大家能學以致用,在其它的編程過程中用的到這些方法!)

<code>for i in temp:
indexs = i.split(',')
x = int(indexs[0])
y = int(indexs[1])
pyautogui.click(1206+x, 428+y)/<code>

最後點擊登錄即可!

<code>driver.find_element_by_xpath('//*[@id="J-login"]').click()/<code>


分享到:


相關文章: