程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python selenium

編輯:Python

#selenium

  • 這個模塊玩兒爬蟲的都知道,因為這個可以完全模擬人為的對浏覽器的操作,在一些反爬蟲做的很完善的站點的時候,大家選取這個模塊,可以說是百試不爽。
  • 很多浏覽器都支持自動操作,我一般用chrome。
  • 模塊獲取元素和定位按鈕的方法有很多,這個大家可以具體官方文檔。
  • 這裡只是想踩一下Web頁面的渲染問題,也就是,我們在使用selenium定位元素時,如果頁面沒有把你需要的需要的定位元素或者按鈕加載出來咋搞。

強制等待

  • 這是最簡單粗暴的方式,方法很是簡單,那就是sleep
  • 這個方法其實挺不靠譜的,就是你蟲子爬啊爬,然後你讓他睡一會兒,等待頁面的加載完成,一種好的現象,它睡醒了,自己需要的東西也出來了,但是如果說是沒有,蟲子就直接罷工拋異常給你。not fount element。

隱形等待

  • 這個就是一種比較老實的等待,那就是利用selenium自帶的方dervier.implicitly_wait(等待時間),
  • 為啥說這個等待方法很老實了,就是因為,回一直等待這個頁面加載渲染完,也就是你上面那個圈圈再也不轉了,你的蟲子就會在你這個已經加載好的頁面上尋找它定位好的元素,然後執行下一步。
  • 這個方法雖然笨重,但是如果說你需要的頁面的比較簡潔,這個方法就比較穩妥,而且你的蟲子也會很舒服。
    ##顯性等待
  • 這個比起上面的方法來說就好一些,網頁加載是一部分一部分的加載,就說明不需要到網頁完全加載完再讓蟲子去爬。
  • python早就在selenium中留好方法,就是常說的
  • from selenium.webdriver.support.wait import WebDriverWait
  • from selenium.webdriver.support import expected_conditions as EC
  • 上面的兩個數模塊
  • 方法的話
  • WebDriverWait(操作對象,等待時間,等待間隔).until(
    EC.presence_of_all_elements_located((等待元素))
    )
  • 等待元素可以使用By定位,這個就不多提及了,因為元素定位的方法更加簡答
  • 這等待對象中有很多的方法,我上面只提到一種方法,大家可以在文檔中根據合適的場景獲取合適的方法,進行定位。

結合scrapy

  • 結合框架,你可能會說,直接提交表單不就行了麼?但是反爬蟲的機制中,數據只有發生點擊事件,人家的服務器才會給你數據,不然沒辦法獲取
  • 這裡將常用的框架scrapy,根據需求在不同的需求在不同的階段進行點擊事件。
  • 一般都發生在頁面爬取然後需要點擊獲取數據然後再爬取,你就會發現這不就是中間層嘛,
  • 在中間層創造一個類,然後去操作浏覽器,不過這時候你就會覺得好別扭啊,我之前都獲取了一半數據了還要再重頭來。
  • 你可以使用幽靈浏覽器,就是計算機後台模擬打開,不過還是重頭來的,我還沒有想到其他的解決辦法,有之後過來更新,大家也可以評論出來。

部分接口使用

  • 說明一下,導入模塊from selenium import webderiver
  1. 打開浏覽器的方法
    deriver = webderiver.chrome()可以使用的浏覽器有好多種
  2. 打開網頁的方法
    deriver.get(url)以上面實例化的對象為實例
  3. 獲取當前頁面的頁面源碼
    source_text = deriver.page_source
  4. 使用完以後最好對這個deriver進行釋放,她自己不會釋放,你需要手動一下
    deriver.quit()deriver.close()這兩有些區別就是,前者會把自己打開的所有頁面干沒了,後者之後關閉當前頁面。
  5. 獲取頁面的圖片文件
    deriver.get_screenshot_as_file('元素名稱')需要引入模塊(先說方法後說庫是不是。。。)from selenium.webdriver.common.desired_capabilities import DesiredCapablitlies
  6. 通過路經定位元素
    deriver.find_element_by_xpath('元素路徑')
    如果要是對其進行點擊操作,就在後面加.click()如果要是需要輸入信息就在後面加.send_keys('輸入信息')就妥。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved