生活随笔
收集整理的這篇文章主要介紹了
零基础带你用python模拟淘宝登录
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
經(jīng)過一段時(shí)間的學(xué)習(xí),并參考各路大神的文章,總結(jié)出一些比較適合小白的網(wǎng)絡(luò)爬蟲的小技巧。跟著筆者的思路,循序漸進(jìn),可以慢慢找到一點(diǎn)小感覺。
開發(fā)環(huán)境
筆者選用的是vs code,輕量級(jí),支持各種插件安裝。
首先進(jìn)入官網(wǎng),下載python安裝包,這里有一點(diǎn)要注意:默認(rèn)下載是64位的python,建議從以下入口進(jìn)入: 點(diǎn)擊進(jìn)入后,拉到最下面,可以選擇64/32位的python安裝。安裝的時(shí)候,要勾選Add Python x.x.x To Path(可省去手動(dòng)配置環(huán)境變量),然后一路默認(rèn)安裝即可。 去官網(wǎng)下載vs-code,一路默認(rèn)安裝即可。 在vs-code中搜索python,選擇第一項(xiàng),安裝python模塊。
配置環(huán)境和依賴項(xiàng)
安裝第三方庫
pyhon之所以受歡迎,得益于它的高效,簡(jiǎn)而言之,就是借助大量的第三方庫。而且,很多強(qiáng)大的功能庫,都提供支持python的api接口。
在cmd下執(zhí)行pip install selenium,selenium是一款WEB自動(dòng)化工具,主要用于網(wǎng)絡(luò)爬蟲、模擬登錄等。 在cmd下執(zhí)行pip install pyautogui,pyautogui有點(diǎn)類似于按鍵精靈,主要用于模擬人操作鼠標(biāo)和鍵盤,可完美破解一些大型網(wǎng)站會(huì)有反爬機(jī)制。 在cmd下執(zhí)行pip install pylint,pylint主要用于發(fā)現(xiàn)并分析編碼中的錯(cuò)誤。 在cmd下執(zhí)行pip install flake8,flake8主要用于規(guī)范python編碼格式。 在cmd下執(zhí)行pip install PyExecJS,PyExecJS用于解析js格式文件,可用來清洗數(shù)據(jù);
配置VS-CODE
設(shè)置tab 4字節(jié)縮進(jìn)
File - Preferences - Setting(快捷鍵:Ctrl+,),選擇user選項(xiàng)卡 打開json文件,在}之前添加代碼(保存好設(shè)置,重啟vs code即可生效):
"editor.detectIndentation" : false
,
"editor.tabSize" : 4 , // vscode設(shè)置的縮進(jìn)量
"editor.formatOnSave" : false
, // 保存時(shí)候自動(dòng)格式化,不建議設(shè)置。我在這里設(shè)置為false
在vs code中配置pylint和flake8
File - Preferences - Setting(快捷鍵:Ctrl+,),選擇Worksapce選項(xiàng)卡 打開json文件,添加如下代碼(保存即可,不用重啟):
{ "python.linting.flake8Enabled" : true
, "python.formatting.provider" : "yapf" , "python.linting.flake8Args" : [ "--max-line-length=248" ] , "python.linting.pylintEnabled" : false
}
將按兩次F5運(yùn)行,改為按一次
切換到Run選項(xiàng)卡,添加配置,打開lanuch.json,添加如下代碼:
{ // Use IntelliSense to learn about possible attributes
. // Hover to view descriptions of existing attributes
. // For more information
, visit
: https
: // go
. microsoft
. com
/ fwlink
/ ?linkid
= 830387 "version" : "0.2.0" , "configurations" : [ { "name" : "Python: 當(dāng)前文件" , "type" : "python" , "request" : "launch" , "program" : "${file}" , "console" : "integratedTerminal" , "stopOnEntry" : false
} ]
}
安裝WebDriver
基礎(chǔ)學(xué)習(xí)
在學(xué)習(xí)過程中參考了很多好的資料,在此分享給大家。
Python Selenium庫的使用: (1)https://blog.csdn.net/weixin_36279318/article/details/79475388 (2)http://www.testclass.net/selenium_python/ (3)https://selenium-python.readthedocs.io/index.html 新手用vs code編寫代碼,經(jīng)常報(bào)一些警告,可參考: http://www.panxiaonan.cc/emlog/post-28.html 網(wǎng)上一些模擬淘寶登錄的文章 (1)https://blog.csdn.net/weixin_43407092/article/details/102975955 (2)https://blog.csdn.net/weixin_46089319/article/details/107861077?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-15&spm=1001.2101.3001.4242
模擬淘寶登錄
打開淘寶網(wǎng)
from selenium
import webdriver
from time
import sleep
class TaoBao ( object ) : def __init__ ( self
) : self
. browser
= webdriver
. Chrome
( ) self
. domain
= 'http://www.taobao.com' def open ( self
) : self
. browser
. get
( self
. domain
) sleep
( 3 )
if __name__
== "__main__" : tb
= TaoBao
( ) tb
. open ( )
元素定位 按F12進(jìn)入控制臺(tái),定位到賬號(hào)和密碼輸入框的位置
用selenium定義元素的api,這里推薦三個(gè),其中find_element_by_xpath最常用
self
. browser
. find_element_by_id
( 'fm-login-id' )
self
. browser
. find_element_by_name
( 'fm-login-id' )
self
. browser
. find_element_by_xpath
( '//*[@id="fm-login-id"]' )
為什么說通過xpath獲取最常用呢,因?yàn)閤path是精準(zhǔn)定位,且能直接拷貝獲得。 定位其它網(wǎng)頁元素,方法類似,不再贅述。
滑塊驗(yàn)證 前面有提到過,selenium可以模擬用戶點(diǎn)擊。
slider
= self
. browser
. find_element_by_xpath
( "//span[contains(@class, 'btn_slide')]" )
if slider
. is_displayed
( ) : self
. action_chains
. drag_and_drop_by_offset
( slider
, 258 , 0 ) . perform
( ) time
. sleep
( 0.5 ) self
. action_chains
. release
( ) . perform
( )
pyautogui模擬人工點(diǎn)擊 前面有提到過,淘寶有反爬機(jī)制,能檢測(cè)到selenium的模擬點(diǎn)擊,會(huì)導(dǎo)致登錄失敗。那么,我們就借助pyautogui模擬人工點(diǎn)擊。
首先,用截圖工具截圖登錄按鈕的圖片(最好用電腦自帶的) pyautogui可以根據(jù)這張圖片,找到登錄按鈕的位置,從而操作鼠標(biāo)去點(diǎn)擊
coords
= pyautogui
. locateOnScreen
( '1.png' ) x
, y
= pyautogui
. center
( coords
) pyautogui
. leftClick
( x
, y
)
登錄結(jié)果校驗(yàn) 點(diǎn)擊登錄按鈕后,我們并不能直觀的判斷是否登錄成功。此時(shí),我們可以再次打開淘寶頁面,查看用戶名是否存在。
找到用戶名的顯示位置 獲取用戶名,因?yàn)閟ite-nav-user不一定存在,故需要用try處理異常
def get_nickname ( self
) : self
. browser
. get
( self
. domain
) time
. sleep
( 0.5 ) try : return self
. browser
. find_element_by_class_name
( 'site-nav-user' ) . text
except NoSuchElementException
: return ''
最終代碼
from selenium
import webdriver
from time
import sleep
from selenium
. common
. exceptions
import NoSuchElementException
from selenium
. common
. exceptions
import WebDriverException
from selenium
. webdriver
import ActionChains
import pyautogui
import pymsgbox
pyautogui
. PAUSE
= 0.5
class TaoBao ( object ) : def __init__ ( self
) : self
. browser
= webdriver
. Chrome
( ) self
. domain
= 'http://www.taobao.com' self
. browser
. maximize_window
( ) self
. browser
. implicitly_wait
( 5 ) def open ( self
) : self
. browser
. get
( self
. domain
) sleep
( 1 ) def login ( self
, usrname
, passwd
) : self
. browser
. find_element_by_xpath
( '//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]' ) . click
( ) self
. browser
. find_element_by_xpath
( '//*[@id="fm-login-id"]' ) . send_keys
( usrname
) self
. browser
. find_element_by_xpath
( '//*[@id="fm-login-password"]' ) . send_keys
( passwd
) sleep
( 1 ) try : slider
= self
. browser
. find_element_by_xpath
( "//span[contains(@class, 'btn_slide')]" ) if slider
. is_displayed
( ) : ActionChains
( self
. browser
) . drag_and_drop_by_offset
( slider
, 258 , 0 ) . perform
( ) sleep
( 0.5 ) ActionChains
( self
. browser
) . release
( ) . perform
( ) except ( NoSuchElementException
, WebDriverException
) : pass try : coords
= pyautogui
. locateOnScreen
( '1.png' ) x
, y
= pyautogui
. center
( coords
) pyautogui
. leftClick
( x
, y
) except TypeError
: pymsgbox
. alert
( '未找到登錄按鈕' ) nickname
= self
. get_nickname
( ) if nickname
: pymsgbox
. alert
( '登錄成功,呢稱為:' + nickname
) def get_nickname ( self
) : self
. browser
. get
( self
. domain
) sleep
( 0.5 ) try : return self
. browser
. find_element_by_class_name
( 'site-nav-user' ) . text
except NoSuchElementException
: return ''
if __name__
== "__main__" : tb
= TaoBao
( ) tb
. open ( ) usrname
= 'lgtxxxxxx' passwd
= 'xxxxxx' tb
. login
( usrname
, passwd
)
總結(jié)
以上是生活随笔 為你收集整理的零基础带你用python模拟淘宝登录 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。