Selenium處理動態HTML
阿新 • • 發佈:2018-03-10
定義 () 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 defsetUp(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