一起學爬蟲(Python) — 19 年輕人,進來學自動化
自從這個一起學自動化發布之后,也是有很多小粉絲就偷偷跟我說看不懂,不明白,求求你教教我之類的(自我想象),所以今天就來詳細的教大家什么是selenium!

深入Selenium
- 前言
- 回顧
- 真·回顧
- 干飯去了
前言

又是一大早就來給大家伙更新啦,昨天好像是發燒了…有些小粉絲問的問題沒有及時回答到,偷懶了一天,
不過昨天有看到某個大佬寫的2020年總結,其中看到他一開始是每天更新三篇,然后每天訪問量5000左右,
那么我也要每天…
怎么可能,
每天三篇也太多了吧,所以說大佬就是大佬,雖然很感動,但是醒來之后還是要悄悄地干飯,然后餓死所有人!

盡量,盡量好吧,能多更就多更,畢竟全靠用愛發電,愛可是會消失的,
各位且看且珍惜哈,如果可以的話,動動你的小手,點個三連,給小澤充充電吧!
回顧
這里為什么是回顧呢,因為我想啊,上一次實在是有點霸道了些,二話不說就把各位壁咚了,根本就沒講明白每一句每一個詞她的用法嘛,這也很不符合小澤親民的形象,所以呢,為了形象,對,沒錯,為了形象,你別自戀啦,就帶著大家先一起回顧一下上一次的全部代碼!
當然也闊能是為了各位,
具體要看點贊的力度啦,點贊不積極,腦殼有問題!

好的,多說不廢話,讓我們直接開沖!
真·回顧
首先,讓我們來一條一條看那天的代碼!
from time import sleep
from selenium import webdriver
這兩句不用多說了叭,好好記住!
# 這里指定自己的谷歌引擎目錄
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
這里呢,就相當于是初始化了一個物件,這個driver是我們自己起的名字,換成其他的也是可以的,然后 ‘./chromedriver.exe’ 是我們的chromedriver.exe的路徑,如果你沒有的話,肯定是會報錯的,或者說版本跟你的瀏覽器不符合也是會報錯的,具體怎么下載在19天里面有講哦~
神奇の傳送門
# 打開csdn的登錄界面
driver.get('https://passport.csdn.net/login?code=public')
print('正在打開指定網頁…')
sleep(1)
這個get()方法呢,里面放我們的url,driver是我們自己定義的,不要迷糊了!
這里為什么要用sleep呢,這里面還是有大學問的,搬好板凳好好聽:
舉個栗子,我們需要定位到美女圖片網站的美女圖片的標簽上面,如果不設定sleep1秒的話,可能就會還沒加載出來程式已經往下走了,然后就會給我們無情的報錯,告訴我們沒有找到該標簽,這是因為我們的美女圖片還沒有加載出來她就往下走了嘛,所以如果設定個sleep1秒的話,就有了1秒時間給她加載,如果你的電腦1秒也不夠的話,就多設定設定,有的時候報錯可能是等待的時間不夠長!
既然說到等待了,這里就給大家科普一下等待的三種方法:
第一種,也就是我們的sleep!
好處呢,就是簡單唄,直接sleep,壞處就是沒依據唄,要等待多久,全靠我們自己的感覺,
第二種,就是implicitly_wait()!
括號里面填的是秒數哦~這是一種隱式等待,比如說我們在括號里面填個60,那就是一分鐘內如果整個頁面加載完了,就繼續往下走,不然就一直等,只等一分鐘,聽懂了嘛,就是會一直等到整個頁面加載完成,才會往下走,比如說你只要第一個美女圖片,她非要給你把全部的美女圖片都加載出來才給你走,
寫法的話…
# 隱式等待,driver是我們自己初始化的,再次強調!
driver.implicitly_wait(60)
不過她的好處就是只需要設定一次,不需要我們瘋狂sleep,只需要在開頭那里設定好最長等待時間,往后的每個頁面都是加載完再往下走,如果規定時間內沒ok,就給你報錯,那就說明網路或者服務器有問題啦~
壞處呢,就是非要全部加載完再走啦,因為可能有的網頁10%的內容是你需要的,很快就加載出來了,然后又花了90%的時間給你加載一堆廣告,沒錯,說的就是你們深夜經常看的那種網站,澳門賭場歡迎您!

分享給我一部唄~
第三種等待方式呢,就比較高級啦,也比較好用,俗話說得好,好的總在后面,所以各位哪怕被甩了也不要太難過了,畢竟年少不知軟飯香,老來病弱無人依,好濕好濕,
既然有了隱式等待,同樣的也有顯式等待,接下來要介紹的就是顯式等待!
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 這里指定自己的谷歌引擎目錄
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
# 打開csdn的登錄界面
driver.get('https://passport.csdn.net/login?code=public')
print('正在打開指定網頁…')
# 主要看下面這塊哦
try:
# driver是我們自己設定的,20是最多等多久,0.5是檢查間隔,每隔0.5秒檢查一次指定標簽有沒有出來
WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located((By.XPATH,'//*[@id="app"]/div/div/div[1]/div[2]/div[5]/ul/li[2]')))
print('指定查帕斯已經加載出來了!')
except:
print('超時!')
# 找到那個輸入賬號密碼的按鈕
dl = driver.find_element_by_xpath('//*[@id="app"]/div/div/div[1]/div[2]/div[5]/ul/li[2]')
# 點擊
dl.click()
可以看到,第三種方法呢,是非常的復雜啊,對于小白來說是非常的不友好,但是她好用啊,富婆難追,但是她好用啊!

追到就是賺到,還不趕快加入追富婆潮流~
咳咳,可以看到上面呢,是根據我們的xpath去判斷標簽是否加載出來的,如果加載出來了就繼續下一步,如果在指定時間里沒加載出來就執行except:里面的代碼,就相當于只要你要的美女圖片一加載出來就立馬拿到然后跑路,
當然了,肯定會有人這樣問,好好的等人家加載完不行嗎,又不缺那點時間,
或者,為什么要這么極端鴨,萬一加載出來是個半成品呢!
當然如果你嫌麻煩,可以用sleep,甚至可以什么都不用,直接裸奔起飛,蕪湖,
還有鴨,現在的網站并不是說要全部加載出來才能進行操作的嘛,畢竟都支持協程或者多執行緒了,就好比說讓一個人穿褲子,難道他就不能內褲和褲子套在一起一起穿嗎,或者說他就不能一邊穿褲子一邊跳舞嗎,都是可以的嘛,所以只要我們要的東西加載出來,就可以立馬去呼叫,去執行,
至于 EC 和 By 呢,是我們呼叫的模塊,自己給他改成了這種縮寫,所以也不要迷茫,問這到底是個啥,
presence_of_element_located這個呢,百度翻譯過來就是:

可以理解為去定位元素啦~
當然后面的括號里是要加元組的,元組元組元組!
不加不會報錯,會執行expect里面的東西,曉得了不,
元組里面呢,第一個就是我們要找的型別,不光有XPATH,還有ID,甚至TAG_NAME,標簽名字,很多很多,大家可以自己去探索一下,人人都是探索家!
后面呢,就是相對應的定位啦,
這種方法呢,解決了前面兩種等待的缺點,化他們的缺點為優點,當然她也是有缺點的,那就是比較難吧,還有就是需要多次呼叫,只要你需要判斷就要呼叫,不過復制粘貼也挺好用的,
當然也有人可能會好奇自動化的話,這個頁面要怎么切換哦,這里呢,也給大家講一哈,
先情景模擬一下,比如說我們深夜的時候看小電影,哎呀一個不小心點到了廣告,相信大家都會有這樣的經歷吧,然后就會蹦出來一個一起來玩球鴨的新頁面,別問我為什么這么懂,我其實不懂,因為你們懂,所以我不懂,懂的掌聲 ,
那這個時候我們自動化的話,默認是在第一個頁面進行操作吧,那當然就會報錯了吧,因為我們所有的操作都是基于第一個頁面的,這個時候就需要進行手動的一個頁面切換!
# 切換到最后一個頁面
driver.switch_to_window(window[-1])

就是這種頁面哦,第一個索引就是0,第二個就是1,第三個就是2,反過來最后一個就是-1!
那么,如何打開一個新視窗呢!
# 拿小本本記好這個方法,只需要改動一下url就可以了
driver.execute_script("window.open('https://www.baidu.com')")
細節拉滿!
# 找到那個輸入賬號密碼的按鈕
dl = driver.find_element_by_xpath('//*[@id="app"]/div/div/div[1]/div[2]/div[5]/ul/li[2]')
# 點擊
dl.click()
sleep(1)
這里如果你看不懂注釋的話,就去19天那里看一下就知道了,小澤是基于那一天的全部代碼來給大家進行一個科普的,
find_element_by_xpath,同樣的,還有:

很多種選擇,任君挑選,
find就是尋找嘛,element就是要素嘛,by就是通過嘛,xpath就是查帕斯嘛,你不光可以通過xpath尋找,還可以通過很多很多,如果看到element后面帶s的,那就是找所有的只要符合條件的,
click就是點擊,沒毛病吧,這里還是可以接受的吧,
當然點擊也是有很多種方式的,不過這里就不多說了,click就夠用了,如果以后再遇到點不了的,再對癥下藥!
干飯去了
言簡意賅,剩下的下午或者晚上或者明天或者后天或者大后天或者大大后天再更新吧,要去干飯了,
大家伙記得點個贊,求求了!

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/242416.html
標籤:其他
