1. 程式人生 > >selenium和phantomjs

selenium和phantomjs

JavaScript 是網路上最常用也是支持者最多的客戶端指令碼語言。它可以收集 使用者的跟蹤數 據,不需要過載頁面直接提交表單,在頁面嵌入多媒體檔案,甚至執行網頁遊戲。 jQuery jQuery 是一個十分常見的庫,70% 最流行的網站(約 200 萬)和約 30% 的其他網站(約 2 億)都在使用。一個網站使用 jQuery 的特徵,就是原始碼裡包含了 jQuery 入口,比如: 如果你在一個網站上看到了 jQuery,那麼採集這個網站資料的時候要格外小心。 jQuery 可 以動態地建立 HTML 內容,只有在 JavaScript 程式碼執行之後才會顯示。如果你用傳統的方 法採集頁面內容,就只能獲得 JavaScript 程式碼執行之前頁面上的內容。 Ajax 我們與網站伺服器通訊的唯一方式,就是發出 HTTP 請求獲取新頁面。如果提交表單之後, 或從伺服器獲取資訊之後,網站的頁面不需要重新重新整理,那麼你訪問的網站就在用 Ajax 技 術。 Ajax 其實並不是一門語言,而是用來完成網路任務(可以認為 它與網路資料採集差不多)的 一系列技術。 Ajax 全稱是 Asynchronous JavaScript and XML(非同步 JavaScript 和python 之――――selenium 2 / 24 奇酷學院高階講師:郭建濤 XML),網站不需要使用單獨的頁面請求就可以和網路伺服器進行互動 (收發資訊)。 DHTML Ajax 一樣,動態 HTML(Dynamic HTML, DHTML)也是一系列用於解決網路問題的 技術 集合。 DHTML 是用客戶端語言改變頁面的 HTML 元素(HTML、 CSS,或者二者皆 被改 變)。比如頁面上的按鈕只有當用戶移動滑鼠之後才出現,背景色可能每次點選都會改變,或 者用一個 Ajax 請求觸發頁面載入一段新內容,網頁是否屬於 DHTML,關鍵要看有沒有用 JavaScript 控制 HTML 和 CSS 元素。 解決辦法 用 Python 解決這個問題只有兩種途徑:  直接從 JavaScript 程式碼裡採集內容(費時費力)  用 Python 的 第三方庫執行 JavaScript,直接採集你在瀏覽器裡看到的頁面。 Selenium 簡介 Selenium 是一個 Web 的自動化測試工具,型別像我們玩遊戲用的按鍵精靈,它支援所 有主流的瀏覽器(包括 PhantomJS 這些無介面的瀏覽器)。 Selenium 可以根據我們的指令,讓瀏覽器自動載入頁面,獲取需要的資料,甚至頁面截 屏,或者判斷網站上某些動作是否發生。 Selenium 自己不帶瀏覽器python 之――――selenium 3 / 24 奇酷學院高階講師:郭建濤 安裝方式一: PyPI 網站下載安裝 https://pypi.python.org/simple/selenium 安裝方式二: pip install selenium Selenium 官方參考文件: http://selenium-python.readthedocs.io/index.html PhantomJS 簡介 PhantomJS 是一個基於 Webkit 的“無介面”(headless)瀏覽器非 Python 庫,它會把網 站載入到記憶體並執行頁面上的 JavaScript,不會展示圖形介面。 把 Selenium 和 PhantomJS 結合在一起,通過Selenium呼叫PhantomJS來直接使用, 就可以執行一個非常強大的網路爬蟲了,這個爬蟲可以處理 JavaScrip、 Cookie、 headers, 以及任何我們真實使用者需要做的事情。 PhantomJS 官方參考文件: http://phantomjs.org/documentation 官網下載安裝 http://phantomjs.org/download.html 1、 解壓放到: C:\phantomjs-2.1.1-windows 2、 需設定環境變數, Path 新增 C:\phantomjs-2.1.1-windows\bin 3、 win+R,輸入 cmd 開啟控制檯,輸入 phantomjs -v,若輸出了版本號,則證明安裝成功 Chrome dirver 的安裝 爬蟲開發過程中使用 selenium +webdriver 開啟 chrome, chrome dirver 的安裝 以 chrome 版本 65.0.3325.181 1、 開啟如下頁面: https://sites.google.com/a/chromium.org/chromedriver/downloads 對照下載說明,找到對應的 ChromeDriver 版本 2.38 2、 開啟如下網頁: http://chromedriver.storage.googleapis.com/index.html 選取 2.38 資料夾,下載對應檔案 3、 把 exe 檔案放置到如下位置之一: (1) chrome 的安裝目錄下(eg: C:\Program Files (x86)\Google\Chrome\Application) (2) Python 的安裝目錄下(eg: D:\software\Python35) 4、 Path 進行編輯,在變數值後面加入 chrome 或 Python 的安裝目錄 5、 用 Chrome 瀏覽器來測試 from selenium import webdriver browser = webdriver.Chrome() browser.get('http://www.baidu.com/')

example::

Selenium 庫裡有個叫 WebDriver 的 API。 WebDriver 可以載入網站也可以查詢頁面元 素,與頁面上的元素進行互動 (傳送文字、點選等),以及執行其他動作來執行網路爬蟲。 #匯入 webdriver from selenium import webdriver #要想呼叫鍵盤按鍵操作需要引入 keys 包 from selenium.webdriver.common.keys import Keys #呼叫環境變數指定的 PhantomJS 瀏覽器建立瀏覽器物件 driver = webdriver.PhantomJS() #get 方法會一直等到頁面被完全載入,然後才會繼續程式,通常測試會在這裡選擇 time.sleep(2) driver.get("http://www.baidu.com/")  獲取頁面名為 wrapper 的 id 標籤的文字內容 data = driver.find_element_by_id("wrapper").text

print(data)

print(driver.title) #生成快照 driver.save_screenshot("baidu.png")  id="kw"是百度搜索輸入框,輸入字串"長城" driver.find_element_by_id("kw").send_keys("奇酷資訊") #id="su"是百度搜索按鈕, click() 是模擬點選 driver.find_element_by_id("su").click()  獲取新的頁面快照 driver.save_screenshot("奇酷資訊.png") #列印網頁渲染後的原始碼 print(driver.page_source) print('============') #獲取當前頁面 Cookie print(driver.get_cookies()) #清除輸入框內容 driver.find_element_by_id("kw").clear() print('============') #獲取當前 url print(driver.current_url)  關閉當前頁面,如果只有一個頁面,會關閉瀏覽器 driver.close()  關閉瀏覽器 driver.quit()

說明: 1、 要使用 selenium 首先匯入 webdriver 2、 生成瀏覽器物件 driver = webdriver.PhantomJS() 3、 driver.get(url)方法:載入指定頁面,阻塞方式直到載入完成 4、 driver.find_element_by_id(elemid)方法:獲取頁面指定 id 的標籤 5、 driver.title:頁面標題 6、 driver.page_source:頁面原始碼 7、 driver.get_cookies():獲取頁面 coolies 8、 driver.save_screenshot(filename): 儲存當前頁面快照 9、 driver.find_element_by_id("kw").send_keys("奇酷資訊"):指定元素設定 value, 通常用於 input field 10、 driver.find_element_by_id("su").click()模擬點選,通常用於按鈕 11、 driver.find_element_by_id("kw").clear(): 清除輸入框內容 12、 driver.quit():關閉瀏覽器