生活随笔
收集整理的這篇文章主要介紹了
零基础带你用python模拟淘宝登录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
經過一段時間的學習,并參考各路大神的文章,總結出一些比較適合小白的網絡爬蟲的小技巧。跟著筆者的思路,循序漸進,可以慢慢找到一點小感覺。
開發環境
筆者選用的是vs code,輕量級,支持各種插件安裝。
首先進入官網,下載python安裝包,這里有一點要注意:默認下載是64位的python,建議從以下入口進入: 點擊進入后,拉到最下面,可以選擇64/32位的python安裝。安裝的時候,要勾選Add Python x.x.x To Path(可省去手動配置環境變量),然后一路默認安裝即可。 去官網下載vs-code,一路默認安裝即可。 在vs-code中搜索python,選擇第一項,安裝python模塊。
配置環境和依賴項
安裝第三方庫
pyhon之所以受歡迎,得益于它的高效,簡而言之,就是借助大量的第三方庫。而且,很多強大的功能庫,都提供支持python的api接口。
在cmd下執行pip install selenium,selenium是一款WEB自動化工具,主要用于網絡爬蟲、模擬登錄等。 在cmd下執行pip install pyautogui,pyautogui有點類似于按鍵精靈,主要用于模擬人操作鼠標和鍵盤,可完美破解一些大型網站會有反爬機制。 在cmd下執行pip install pylint,pylint主要用于發現并分析編碼中的錯誤。 在cmd下執行pip install flake8,flake8主要用于規范python編碼格式。 在cmd下執行pip install PyExecJS,PyExecJS用于解析js格式文件,可用來清洗數據;
配置VS-CODE
設置tab 4字節縮進
File - Preferences - Setting(快捷鍵:Ctrl+,),選擇user選項卡 打開json文件,在}之前添加代碼(保存好設置,重啟vs code即可生效):
"editor.detectIndentation" : false
,
"editor.tabSize" : 4 , // vscode設置的縮進量
"editor.formatOnSave" : false
, // 保存時候自動格式化,不建議設置。我在這里設置為false
在vs code中配置pylint和flake8
File - Preferences - Setting(快捷鍵:Ctrl+,),選擇Worksapce選項卡 打開json文件,添加如下代碼(保存即可,不用重啟):
{ "python.linting.flake8Enabled" : true
, "python.formatting.provider" : "yapf" , "python.linting.flake8Args" : [ "--max-line-length=248" ] , "python.linting.pylintEnabled" : false
}
將按兩次F5運行,改為按一次
切換到Run選項卡,添加配置,打開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: 當前文件" , "type" : "python" , "request" : "launch" , "program" : "${file}" , "console" : "integratedTerminal" , "stopOnEntry" : false
} ]
}
安裝WebDriver
基礎學習
在學習過程中參考了很多好的資料,在此分享給大家。
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編寫代碼,經常報一些警告,可參考: http://www.panxiaonan.cc/emlog/post-28.html 網上一些模擬淘寶登錄的文章 (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
模擬淘寶登錄
打開淘寶網
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進入控制臺,定位到賬號和密碼輸入框的位置
用selenium定義元素的api,這里推薦三個,其中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獲取最常用呢,因為xpath是精準定位,且能直接拷貝獲得。 定位其它網頁元素,方法類似,不再贅述。
滑塊驗證 前面有提到過,selenium可以模擬用戶點擊。
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模擬人工點擊 前面有提到過,淘寶有反爬機制,能檢測到selenium的模擬點擊,會導致登錄失敗。那么,我們就借助pyautogui模擬人工點擊。
首先,用截圖工具截圖登錄按鈕的圖片(最好用電腦自帶的) pyautogui可以根據這張圖片,找到登錄按鈕的位置,從而操作鼠標去點擊
coords
= pyautogui
. locateOnScreen
( '1.png' ) x
, y
= pyautogui
. center
( coords
) pyautogui
. leftClick
( x
, y
)
登錄結果校驗 點擊登錄按鈕后,我們并不能直觀的判斷是否登錄成功。此時,我們可以再次打開淘寶頁面,查看用戶名是否存在。
找到用戶名的顯示位置 獲取用戶名,因為site-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
)
總結
以上是生活随笔 為你收集整理的零基础带你用python模拟淘宝登录 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。