孤荷凌寒自學python第八十六天對selenium模塊進行較詳細的瞭解css
(今天因爲文中所闡述的緣由沒有進行屏幕錄屏,見諒)html
爲了可以使用selenium模塊進行真正的操做,今天主要大範圍搜索資料進行對selenium模塊的學習,而且借2019年的新年好運竟然在今天就來了,還在學習Python的過程當中就接到一個任務,完成了第一個真正有實用價值的做品,大大加強了信心,也對Python爬取內容,操縱網頁的能力有了真切的體會。python
1、首先真誠感謝如下文章做者的無私分享:web
查找到html頁面標籤對象方法的參考ajax
http://www.javashuo.com/article/p-racdoggj-ga.html數據庫
https://blog.csdn.net/u012941152/article/details/83011110編程
http://www.javashuo.com/article/p-zegqvqzz-dq.html瀏覽器
下面這篇博主總結得很是全面,很是感激:網絡
http://www.cnblogs.com/yufeihlf/p/5717291.html框架
下面這篇着重講解了,Xpath語法下的定位方法:
http://www.cnblogs.com/qq78292959/archive/2013/08/26/3283714.html
2、selenium模塊最經常使用的對象
from selenium import webdriver
webdriver是瀏覽器對象的總類,在它的下面直接對接火狐瀏覽器接口與谷歌瀏覽器接口。
所以最經常使用的類是:
webdriver.Firefox
經過webdriver.Firefox類的初始化方法就能夠獲得一個火狐瀏覽器對象,這但是真正對應了一個在桌面上可見的瀏覽器界面哦。
webdriver.Firefox類的初始化方法能夠不須要任何實參,也能夠傳遞一個指明昨天下載後放到瀏覽器安裝目錄的
geckodriver.exe
對象的路徑。
如個人練習代碼中的寫法:
brower = webdriver.Firefox(executable_path=r'C:\Program Files\Mozilla Firefox\geckodriver.exe')
這樣我就獲得了一個火狐瀏覽器對象(webdriver瀏覽器對象):
brower
3、讓瀏覽器本身加載一個頁面地址
通常狀況下讓瀏覽器對象執行
get(要打開的頁面url)
方法就可讓瀏覽器自動加載指定的頁面內容。
4、webdriver瀏覽器對象怎麼在已經打開的頁面中找到具體的某個html標籤對象
(如下內容根據下面地址的博文整理精簡,感謝博主的無私分享)
http://www.cnblogs.com/yufeihlf/p/5717291.html
1.經過id定位元素
webdriver瀏覽器對象.find_element_by_id("html標籤對象的ID字符串")
2.經過class_name定位元素
webdriver瀏覽器對象.find_element_by_class_name("css類名class值")
使用
find_element_by_class_name
方法只返回找到的符合條件的第一個html標籤對象
此時此Html對象的標準類別是(針對我使用的火狐瀏覽器):
selenium.webdriver.firefox.webelement.FirefoxWebElement
對象。
而使用
find_elements_by_class_name
方法獲得的是全部符合條件的html標籤對象的一個List(列表)對象。
3.經過tag_name定位元素(如:a div p 等)
webdriver瀏覽器對象.find_elements_by_tag_name("html標籤類別名")
4.經過name定位元素
webdriver瀏覽器對象.find_elements_by_tag_name("html標籤類別名")
5.經過link文字精肯定位元素
webdriver瀏覽器對象.find_element_by_link_text("a標籤的內含文本的所有")
6.經過link文字模糊定位元素
webdriver瀏覽器對象.find_element_by_link_text("a標籤的內含文本的部份內容")
7.經過CSS定位元素
webdriver瀏覽器對象.find_element_by_css_selector("CSS標識名")
7.1經過id屬性定位元素
#號表示經過id屬性來定位元素
find_element_by_css_selector("#kw")
7.2經過class屬性定位元素
.號表示經過class屬性來定位元素
find_element_by_css_selector(".s_ipt")
7.3經過標籤名定位元素
find_element_by_css_selector("input")
7.4經過屬性定位元素(挺經常使用的)
find_element_by_css_selector("[name='wd']")
find_element_by_css_selector("[maxlength='255']")
屬性值包含某個值
屬性值包含wd:適用於由空格分隔的屬性值。
find_element_by_css_selector("[name~='wd']")
7.5父子定位元素
查找有父親元素的標籤名爲span,它的全部標籤名叫input的子元素
find_element_by_css_selector("span>input")
7.6組合定位元素
(1)標籤名#id屬性值:指的是該input標籤下id屬性爲kw的元素
find_element_by_css_selector("input#kw")
(2)標籤名.class屬性值:指的是該input標籤下class屬性爲s_ipt的元素
find_element_by_css_selector("input.s_ipt")
(3)標籤名[屬性=’屬性值‘]:指的是該input標籤下name屬性爲wd的元素
find_element_by_css_selector("input[name='wd']")
(4)父元素標籤名>標籤名.class屬性值:指的是span下的input標籤下class屬性爲s_ipt的元素
find_element_by_css_selector("span>input.s_ipt")
(5)多個屬性組合定位元素
指的是input標籤下id屬性爲kw且name屬性爲wd的元素
find_element_by_css_selector("input.s_ipt[name='wd']")
指的是input標籤下name屬性爲wd且maxlength爲255的元素
find_element_by_css_selector("input[name='wd'][maxlength='255']")
8.經過XPath定位元素
webdriver瀏覽器對象.find_element_by_xpath("XPath語句")
8.1經過屬性定位元素
find_element_by_xpath("//標籤名[@屬性='屬性值']")
(1)id屬性:
find_element_by_xpath("//input[@id='kw']")
(2)class屬性:
find_element_by_xpath("//input[@class='s_ipt']")
(3)name屬性:
find_element_by_xpath("//input[@name='wd']")
(4)maxlength屬性:
find_element_by_xpath("//input[@maxlength='255']")
8.2經過標籤名定位元素
find_elements_by_xpath("//input")
上面的例子表示將找出使用的input標籤。
8.3父子定位元素
如:查找有父親元素的標籤名爲span,它的全部標籤名叫input的子元素
find_element_by_xpath("//span/input")
8.4根據元素內容定位元素
以下面的例子:
find_element_by_xpath("//p[contains(text(),'我的主頁')]")
再以下面的xpath語句
//input[contains(@class,'s')]
將找到一個class屬性包含s的html標籤的對象。
8.5組合定位元素
(1)find_element_by_xpath("//span/input[@class='s_ipt']")
//父元素標籤名/標籤名的屬性值
指的是span下的input標籤下class屬性爲s_ipt的html標籤對象。
(2)多個屬性組合定位(挺經常使用的)
find_element_by_xpath("//input[@class='s_ipt' and @name='wd']")
指的是input標籤下id屬性爲kw且name屬性爲wd的html標籤對象。
find_element_by_xpath("//p[contains(text(),'我的主頁') and @id='myid']")
指的是p標籤下內容包含「我的主頁」且id屬性爲myid的html標籤對象。
2、而後今天開始完成昨天接手的一個任務,也算是我學Python以來第一個要求以Python來完成的任務。
原本過去業餘作過威客至關一段時間,感受用時間與精力去換取微薄的金錢,其實迷失了自我,已經許久不曾接過活了。何況本身也還在初學階段,但是這位朋友堅稱我目前的能力能夠幫他完成,還能夠幫他節約很多錢,也提醒我順便本身練練手,實踐下,因而我只好不弗好意,硬着頭皮來實踐了一下。
其實最開始看到要求及對要模擬操做並爬取相關信息的網頁內容仍是感受至關讓我爲難的——
首先要處理的多個網頁,全部html源碼的全部元素都沒有固定的Id屬性值,全部元素要麼沒有id屬性,要麼也是臨時生成的id屬性值,頁面一刷新就所有改變;
第二,竟然沒有使用任何一個a標籤,意味着它的全部二級三級……頁面都是臨時生成的,頁面地址都是臨時生成的,並且所有由混亂化的Js代碼和ajax技術來控制頁面跳轉,用的不是a標籤這種連接,竟然所有使用div標籤。
第三,用來代替a標籤功能的div標籤中並無任何onclick這樣的事件屬性代碼,很顯然所有控制都在Js代碼中。
第四,幾乎全部的div標籤都具備徹底一致的屬性特徵,因爲內含文本(innertext)多數時候是臨時從數據庫中加載的,不具備識別任何html標籤元素的意義。
第五,直接查看到的任何一個頁面的html源代碼與實際顯示的頁面內容徹底沒有關係,很顯然是使用的ajax之類的技術延遲加載的。
第六,後來發現頁面大量使用了iframe框架,並且最多的有十層iframe嵌套那麼多,我曾經用asp.net寫過複雜 的網站,見到這種局面只能感慨寫網頁的人實在是有意而爲之。
第七,客戶強調,自己網頁平臺就嚴格防範由程序自動模擬操做,所以,打開任何一個頁面後必須 要有頁面點擊,頁面滾動,鍵盤動做等,纔會視爲有效操做。
第八,不能重複看任何內容,每一個頁面內容只能加載一次,而且必須隨機化(這徹底沒法理解的什麼遊戲規則哈)。
第九,頁面上的視頻播放會自動隔段隨機時間就中斷播放,以檢測是否人真的還在看。
……
然而客戶再三要求,我不得已只好試試,最開始都不敢收預付金,決定要作作,真的要考驗一下本身86天來的所有所學,也考驗下Python的能力是否真的名不虛傳。
我其實懷着能作到哪一個程度就作到哪一個程度的心情開始了操做,然而最後,通過近五個小時的努力,最終發現selenium模塊的力量真的是無窮!!
僅僅靠着selenium模塊與sb4模塊的協助,竟然python輕鬆就搞定當初看起來徹底不可能的操做,這下我徹底把Python視爲了神通常的存在了。
不過因爲這位客戶朋友的再三強調,我就既不能將學習過程錄屏分享出來 ,甚至也不能分享任何代碼過程。這彷佛也違反了我徹底分享,全面分享的初衷,不過收了別人錢錢,看在人民幣的份上,就只好如此啦,對不住你們。
可以在學習階段就見識到Python的強大力場,居然還能夠有四位數以上意外收入的驚喜,讓我對學習好Python有了更大的夢想。
3、拿到學Python後的第一筆收益後,我準備從明天起給本身放假
感謝這學習86天來,朋友們的熱心幫助,真誠鼓勵,沒有你們的鼓勵,也許我並不能堅持這麼久,謝謝大家。
從零開始轉學Python的初學階段就此宣告結束,我將進行一段時間的休整,並利用寒假假期教孩子一塊兒學習研究scratch與mixly。
此後,我將繼續學習並與你們一塊兒分享第二階段自學Python的的所有過程。
祝你們春節快樂!豬年大吉!
——————————
今天整理的學習筆記完成,最後例行說明下個人自學思路:
根據過去多年我自學各類編程語言的經歷,認爲只有真正體驗式,解決實際問題式的學習纔會有真正的效果,即讓學習實際發生。在2004年的時候我開始在一個鄉村小學自學電腦 並學習vb6編程語言,沒有學習同伴,也沒有高師在上,甚至電腦都是孤島(鄉村那時尚未網絡),有的只是一本舊書,在痛苦的自學摸索中,我找到適應本身零基礎的學習方法:首先是每讀書的一小節就做相應的手寫筆記,第二步就是上機測試每個筆記內容是否實現,其中會發現書中講的其實有出入或錯誤,第三步就是在上機測試以後,將筆記改成電子版,造成最終的修訂好的正確無誤的學習筆記 。
經過反覆嘗試錯誤,在那個沒有分享與交流的黑暗時期我摸黑學會了VB6,爾後接觸了其它語言,也曾聽過付費視頻課程,結果發現也許本身學歷果真過低,就算是零基礎的入門課程,其實也難以跟上進度,講師的教學多數出現對初學者的實際狀況並不瞭解的狀況,何況學習者的個體也存在差別呢?固然更可怕的是收費課程的價格每每是本身難以承受的。
因而個人全部編程學習都改成了自學,繼續本身的三步學習筆記法的學習之路。
固然自學的最大問題是會走那麼多的彎路,沒有導師直接輸入式的教學來得直接,好在網絡給咱們帶來無限搜索的機會,你們在網絡上的學習日誌帶給咱們共享交流的機會,而QQ羣等交流平臺、網絡社區的成立,咱們能夠一塊兒自學,互相批評交流,也能夠得到更有效,更自主的自學成果。
因而我以人生已過半的年齡,決定繼續個人編程自學之路,開始學習python,只但願與你們共同交流,一我的的獨行是可怕的,只有一羣人的共同前進纔是有但願的。
誠摯期待您的交流分享批評指點!歡迎聯繫我加入從零開始的自學聯盟。
這個時代互聯網成爲了一種基礎設施的存在,因而原本在孤獨學習之路上的咱們變得再也不孤獨,由於網絡就是一個新的客廳,咱們時刻均可以進行沙龍活動。
很是樂意能與你們一塊兒交流本身自學心得和發現,更但願你們可以對我學習過程當中的錯誤給予指點——是的,這樣我就能有許多免費的高師了——這也是分享時代,社區時代帶來的好福利,我相信你們會的,是吧!
喜馬拉雅語音筆記:https://www.ximalaya.com/keji/19103006/157532027