1. 程式人生 > >Selenium處理動態HTML

Selenium處理動態HTML

定義 () script 替代 運行 自動化測試 ble 測試工具 pan

    當一些網站使用了動態加載我們該如何搞定呢?

    有兩種方法:其一,直接在JavaScript裏面采集內容,但是操作起來十分麻煩;其二,使用python的第三方庫來運行JavaScript,直接采集你在瀏覽器裏面看到的內容。

    這時候就用到了python的一個自動化測試工具Selenium,它可以根據我們的指令,讓瀏覽器自動加載頁面,獲取所需要的數據。我們直接用命令行就可以安裝selenium了:pip install selenium 。但是有一個問題,selenium自己本身是不具備瀏覽器功能的,需要配合第三方瀏覽器使用,如PhantomJS。但是,selenium開始漸漸不支持這個內置的無界面瀏覽器了,我們可以使用chrome來替代,但是需要安裝Chromedriver,並添加環境變量。

    技術分享圖片

    因為我安裝的Chromedriver版本太低,所以會出現報錯。但是可以看到,成功的打開了谷歌瀏覽器,並且顯示Chrome正在受到自動測試軟件的控制。

   技術分享圖片

    模擬一個動態網頁的加載。

 1 #這裏是導入python的測試模塊
 2 import unittest
 3 from selenium import webdriver
 4 from bs4 import BeautifulSoup
 5 
 6 
 7 #定義一個類,並且繼承測試模塊
 8 class douyuSelenium(unittest.TestCase):
 9     def
setUp(self): 10 self.driver=webdriver.PhantomJS() 11 12 #self.driver=webdriver.Chrome() 13 #具體的測試方法,要以test開頭 14 def testDouyu(self): 15 self.driver.get("https://www.douyu.com/directory/all") 16 while True: 17 soup=BeautifulSoup(self.driver.page_source,"
lxml") 18 titles=soup.find_all(h3,{class:ellipsis}) 19 nums=soup.find_all(span,{class:dy-num fr}) 20 21 for title,num in zip(titles,nums): 22 print(u觀眾人數 + num.get_text().strip(),u\t房間標題: + title.get_text().strip()) 23 #判斷是否到了最後一頁 24 if self.driver.page_source.find(shark-pager-disable-next) !=-1: 25 break 26 #模擬點擊 27 self.driver.find_element_by_class_name(shark-pager-next).click() 28 29 def tearTest(self): 30 print(u加載完成。。。) 31 self.driver.quit() 32 33 34 if __name__=="__main__": 35 unittest.main()

    

    技術分享圖片

    可以看到爬取了房間人數以及標題。

Selenium處理動態HTML