Python3.x:Selenium+PhantomJS爬取帶Ajax、Js的網頁及獲取JS返回值

xiondun發表於2024-04-12

Python3.x:Selenium+PhantomJS爬取帶Ajax、Js的網頁及獲取JS返回值

前言 

  現在很多網站的都大量使用JavaScript,或者使用了Ajax技術。這樣在網頁載入完成後,url雖然不改變但是網頁的DOM元素內容卻可以動態的變化。如果處理這種網頁是還用requests庫或者python自帶的urllib庫那麼得到的網頁內容和網頁在瀏覽器中顯示的內容是不一致的。

解決方案

  使用Selenium+PhantomJS。這兩個組合在一起,可以執行非常強大的爬蟲,可以處理cookie,JavaScript,header以及其他你想做的任何事情。

安裝第三方庫

  Selenium是一個強大的網路資料採集工具,最初是為網站自動化測試開發的,其有對應的Python庫;

  Selenium安裝命令:

  pip install selenium

安裝PhantomJS

  PhantomJS是一個基於webkit核心的無頭瀏覽器,即沒有UI介面,即它就是一個瀏覽器,只是其內的點選、翻頁等人為相關操作需要程式設計實現。透過編寫js程式可以直接與webkit核心互動,在此之上可以結合java語言等,透過java呼叫js等相關操作。需要去官網下載對應平臺的壓縮檔案;

PhantomJS(phantomjs-2.1.1-windows)下載地址:http://phantomjs.org/download.html,按照不同的系統選擇相應的版本

對windows系統來說,下載PhantomJs 然後將 解壓後的執行檔案放在被設定過環境變數的地方,不設定的話,後續程式碼就要設, 所以這裡直接放進來方便;

然後檢測下,在cmd視窗輸入phantomjs:

出現這樣的畫面,即表示成功;

對Mac系統來說,下載後儲存到一個路徑中,可以直接儲存在環境變了路徑中,也可以在環境變數路徑中建立一個指向phantomjs的軟連線

ln -s /usr/local/opt/my/phantomjs-2.1.1-macosx/bin/phantomjs /usr/local/bin

測試程式碼:

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get('http://www.baidu.com/')
print (driver.page_source)

能成功獲取到頁面元素即為安裝成功

示例一:

  Selenium+PhantomJS示例程式碼:

複製程式碼
from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get('http://www.cnblogs.com/feng0815/p/8735491.html')
#獲取網頁原始碼
data = driver.page_source
print(data)
#獲取元素的html原始碼
tableData = driver.find_elements_by_tag_name('tableData').get_attribute('innerHTML')
#獲取元素的id值
tableI = driver.find_elements_by_tag_name('tableData').get_attribute('id')
#獲取元素的文字內容
tableI = driver.find_elements_by_tag_name('tableData').text
driver.quit()
複製程式碼

  能輸出網頁原始碼,說明安裝成功

獲取JS返回值

相關文章