自動化測試工具:Selenium 無頭瀏覽器:PhantomJS
阿新 • • 發佈:2018-12-14
Ajax只是一個載入技術
selenium是可以通過pycharm自動匯入模組的
然後把檔案複製到scripts目錄下,在把下載的路徑設定成環境變數就可以使用了
面試的時候直接說自己會自動化測試工具、無頭瀏覽器去爬取動態載入頁面、js分頁技術、ajax記載技術。Great
下面介紹用法(可能不全,可自行百度)以及附上程式碼:
當你出現ResourceWarning:unclosed<socket.socketfd=632,family=AddressFamily.AF_INETtype=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 54123), raddr=('127.0.0.1', 53477)>return self._request(command_info[0], url, body=data)
這種報錯的時候沒事,只是使用版本不同,程式還是照樣執行
# #匯入webdeiver APT,可以呼叫瀏覽器和操作頁面 # from selenium import webdriver # #匯入keys,可以使用操作鍵盤、標籤、滑鼠 # from selenium.webdriver.common.keys import Keys # #呼叫瀏覽器 selenium是不帶瀏覽器的 # driver=webdriver.PhantomJS() # # driver.get('http://www.baidu.com/') # #頁面截圖 # driver.save_screenshot('baidu.png') # # driver.find_element_by_id('kw').send_keys(u'美女') # # driver.save_screenshot('baidu.png') # # #獲取百度原始碼:dirver.page_source # #獲取cookie值:dirver.get_cookies() # #driver.find_element_by_id('kw').send_keys(Keys.RETURN)
鬥魚為例,這裡用到了測試模組,成功執行的話會返回一個OK,鬥魚是js分頁技術:
#無頭瀏覽器去爬取動態載入頁面 #呼叫測試化模組,引數值是固定的 import unittest #匯入webdeiver APT,可以呼叫瀏覽器和操作頁面 from selenium import webdriver #用BeautifulSoup解析模組 from bs4 import BeautifulSoup as bs class douyu(unittest.TestCase): # 初始化方法,必須是setUp() def setUp(self): # 呼叫瀏覽器 selenium是不帶瀏覽器的 self.driver = webdriver.PhantomJS() self.num = 0 self.count = 0 # 測試方法必須有test字樣開頭 def testDouyu(self): self.driver.get("https://www.douyu.com/directory/all") while True: soup = bs(self.driver.page_source, "lxml") # 房間名, 返回列表 names = soup.find_all("h3", {"class" : "ellipsis"}) # 觀眾人數, 返回列表 numbers = soup.find_all("span", {"class" :"dy-num fr"}) #主播ID,返回列表 ids=soup.find_all('span',{'class':'dy-name ellipsis fl'}) # zip(names, numbers) 將name和number這兩個列表合併為一個元組 : [(1, 2), (3, 4)...] for name, number,id in zip(names, numbers,ids): print(u"主播: -" + id.get_text().strip()+u"-\t觀眾人數: -" + number.get_text().strip() + u"-\t房間名: " + name.get_text().strip()) x=number.get_text().strip() y=x.replace('萬','').strip() self.num += 1 self.count += int(float(y))*10000 # 如果在頁面原始碼裡找到"下一頁"為隱藏的標籤,就退出迴圈 if self.driver.page_source.find("shark-pager-disable-next") != -1: break # 一直點選下一頁 self.driver.find_element_by_class_name("shark-pager-next").click() # 測試結束執行的方法 def tearDown(self): # 退出PhantomJS()瀏覽器 print ("當前網站直播人數" + str(self.num)) print ("當前網站觀眾人數" + str(self.count)) self.driver.quit() if __name__ == "__main__": # 啟動測試模組 unittest.main()
爬取結果如下:
豆瓣的ajax載入技術:
from selenium import webdriver
import time
driver = webdriver.PhantomJS()
driver.get("https://movie.douban.com/typerank?type_name=劇情&type=11&interval_id=100:90&action=")
time.sleep(3)
# 向下滾動10000畫素
js = "document.body.scrollTop=10000"
#js="var q=document.documentElement.scrollTop=10000"
#檢視頁面快照
driver.save_screenshot("douban.png")
# 執行JS語句
driver.execute_script(js)
time.sleep(10)
#檢視頁面快照
driver.save_screenshot("newdouban.png")
driver.quit()