天天看點

selenium模拟登陸淘寶,擷取cookies新年工作第一天,再次祝大家新年快樂,豬年大吉!

新年工作第一天,再次祝大家新年快樂,豬年大吉!

1、前言,前期準備

這次分享一下模拟登陸淘寶實記。淘寶作為中國幾大電商網站之一,反爬措施可以說是相當完善的,在這裡我會分享出我是如何使用selenium成功登陸淘寶的。首先請配置好selenium操作谷歌浏覽器,然後就是準備好一個淘寶賬号密碼,最後是準備好fiddle抓包工具。

2、發現問題

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/2/11
# @Author  : Andy丶Tao
# @File    : tabao.py
# @Software: PyCharm
import time
import random
from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.get('https://login.taobao.com/member/login.jhtml')
driver.maximize_window()  # 視窗最大化
driver.implicitly_wait(3)
driver.find_element_by_id('J_Quick2Static').click()
time.sleep(random.random()) # 随機休眠0-1秒
# 輸入賬号密碼
driver.find_element_by_id('TPL_username_1').send_keys('淘寶賬号') # 淘寶賬号
time.sleep(random.random())
driver.find_element_by_id('TPL_password_1').send_keys('淘寶密碼') # 淘寶密碼
time.sleep(random.random())
# 模拟滑動
getcheck = driver.find_element_by_id('nc_1_n1z')
ActionChains(driver).click_and_hold(on_element=getcheck).perform()
ActionChains(driver).move_to_element_with_offset(to_element=getcheck, xoffset=120, yoffset=2).perform()
time.sleep(0.1)
ActionChains(driver).move_to_element_with_offset(to_element=getcheck, xoffset=120, yoffset=2).perform()
time.sleep(0.3)
ActionChains(driver).move_to_element_with_offset(to_element=getcheck, xoffset=120, yoffset=2).perform()
time.sleep(0.9)
# 模拟點選
driver.find_element_by_id('J_SubmitStatic').click()
driver.close()
           

我們先正常操作一下使用selenium直接登陸淘寶會發現無論如何滑動滑塊,始終通過不了淘寶驗證,但是我們正常浏覽器卻可以直接登陸,看來淘寶對selenium控制的浏覽器是有檢測的,如何突破這個檢測就是本篇的重點。

selenium模拟登陸淘寶,擷取cookies新年工作第一天,再次祝大家新年快樂,豬年大吉!

3、問題解決

首先我們在selenium控制的谷歌浏覽器,和自己使用的谷歌浏覽器上分别打開console面闆,均輸入window.navigator.webdriver,會發現傳回值有所不同,正常浏覽器傳回的是false或者undefined,而selenium控制的谷歌浏覽器卻傳回的是true,淘寶應該就是通過這個來檢測selenium的。

selenium模拟登陸淘寶,擷取cookies新年工作第一天,再次祝大家新年快樂,豬年大吉!

 上圖箭頭所指為淘寶登陸的所加載的js,将這段js代碼儲存下來。并将下面代碼加入到這段js當中。

Object.defineProperties(navigator,{

    webdriver:{

        get:() =>false

    }

})
           
selenium模拟登陸淘寶,擷取cookies新年工作第一天,再次祝大家新年快樂,豬年大吉!

 接下來就是替換了,将淘寶登陸加載的js替換成加載我們本地的js,這裡就要用到我們的fiddle抓包工具。

首先打開fiddle進行抓包,運作一下我們最開始寫的selenium登陸代碼,抓一下這段代碼所發出的請求。具體替換操作如下圖:

selenium模拟登陸淘寶,擷取cookies新年工作第一天,再次祝大家新年快樂,豬年大吉!

上圖步驟3的位置是自己本地路徑。配置好之後,再次運作最開始的模拟登陸代碼就可以成功登陸啦! 

更新版入口