最近按公司要求,爬取相關網站時,發現沒有找到js包的地址,我就採用selenium來爬取信息,相關實戰連接:python爬蟲實戰(一)--------中國做物種質信息網css
Selenium 是什麼?一句話,自動化測試工具。它支持各類瀏覽器,包括 Chrome,Safari,Firefox 等主流界面式瀏覽器,若是你在這些瀏覽器裏面安裝一個 Selenium 的插件,那麼即可以方便地實現Web界面的測試。換句話說叫 Selenium 支持這些瀏覽器驅動。Selenium支持多種語言開發,好比 Java,C,Ruby等等,有 Python 嗎?那是必須的!安裝只要cmd中 pip install selenium 便可。html
對於通常網站來講scrapy、requests、beautifulsoup等均可以爬取,可是有些信息須要執行js才能顯現,並且你肉眼所能看到的基本都能爬取下來,在學習中遇到了,就記錄下來方便之後查看。前端
webdrive是selenium中一個函數:java
1 from selenium import webdriver 2 driver = webdriver.PhantomJS() 3 driver.get('網址')
其中PhantomJS同時能夠換成Chrome、Firefox、Ie等等,可是PhantomJS是一個無頭的瀏覽器,運行是不會跳出相應的瀏覽器,運行相對效率較高。在調試中能夠先換成Chrome,方便調試,最後再換成PhantomJS便可。python
PhantomJS是一個基於webkit的JavaScript API。它使用QtWebKit做爲它核心瀏覽器的功能,使用webkit來編譯解釋執行JavaScript代碼。任何你能夠在基於webkit瀏覽器作的事情,它都能作到。它不只是個隱形的瀏覽器,提供了諸如CSS選擇器、支持Web標準、DOM操做、JSON、HTML五、Canvas、SVG等,同時也提供了處理文件I/O的操做,從而使你能夠向操做系統讀寫文件等。PhantomJS的用處可謂很是普遍,諸如前端無界面自動化測試(須要結合Jasmin)、網絡監測、網頁截屏等。git
PhantomJS官方地址:http://phantomjs.org/。github
PhantomJS官方API:http://phantomjs.org/api/。web
PhantomJS官方示例:http://phantomjs.org/examples/。api
PhantomJS GitHub:https://github.com/ariya/phantomjs/。瀏覽器
本人windowns7系統,把下載下來的phantomjs.exe移到你所用python文件夾下的Script中就可使用了。(下載PhantomJS-2.1.1-windowns.zip連接:http://pan.baidu.com/s/1c8HeBc 密碼:2zm4)
小測試:
1 from selenium import webdriver 2 driver = webdriver.PhantomJS() 3 driver.get("http://hotel.qunar.com/") 4 data = driver.title 5 print data 6 7 #輸出 8 【去哪兒酒店】酒店預訂, 酒店查詢-去哪兒網Qunar.com
1 # -*-coding:utf-8-*- 2 from selenium import webdriver 3 import time 4 import win32api 5 import re 6 import win32con 7 browser = webdriver.PhantomJS() 8 '''PhantomJS的屏幕截圖是滾動底部的,而Chrome沒有''' 9 10 browser.get("http://flight.qunar.com/") #打開去哪兒官網 11 a=browser.get_screenshot_as_file("E:/Python27/test2.jpg") #屏幕截圖 12 13 browser.find_element_by_id("searchTypeRnd").click() #點擊往返 14 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[1]/div/input').clear() #先清理下輸入框,默認是有地方的 15 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[1]/div/input').send_keys(u"北京") #輸入起點位置 16 17 '''這裏涉及到win32api能夠參考相關手冊----如下是鍵盤操做''' 18 time.sleep(0.5) 19 win32api.keybd_event(108,0,0,0) #按enter鍵 20 #按某個鍵 win32api.keybd_event(鍵位碼,0,0,0) 21 win32api.keybd_event(108,0,win32con.KEYEVENTF_KEYUP,0)#釋放按鍵 22 #釋放按鍵 win32api.keybd_event(鍵位碼,0,win32con.KEYEVENTF_KEYUP,0) 23 24 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[2]/div/input').clear() 25 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[2]/div/input').send_keys(u"上海") #輸入終點位置 26 time.sleep(0.5) 27 win32api.keybd_event(108,0,0,0) #按enter鍵 28 win32api.keybd_event(108,0,win32con.KEYEVENTF_KEYUP,0) #釋放按鍵 29 30 browser.find_element_by_xpath('//*[@id="fromDate"]').clear() 31 browser.find_element_by_xpath('//*[@id="fromDate"]').send_keys("2017-04-19") #輸入出發時間 32 #browser.find_element_by_xpath('//*[@id="fromDate"]').click() 33 browser.find_element_by_xpath('//*[@id="toDate"]').clear() 34 browser.find_element_by_xpath('//*[@id="toDate"]').send_keys("2017-04-22") #輸入返程時間 35 #browser.find_element_by_xpath('//*[@id="toDate"]').click() 36 37 38 '''法二設置地點和時間''' 39 #browser.find_element_by_name("name").send_keys("北京(BJS)") #設置值 40 #browser.find_element_by_name("pass").send_keys("上海(SHA)") #設置值 41 #browser.find_element_by_id("txtAirplaneTime1").send_keys("2016-12-19") #設置值 42 43 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[4]/button').click() #點擊按鈕 提交表單 44 browser.maximize_window() #最大窗口 45 46 '''保存當前網頁''' 47 print(browser.current_url) #當前url 48 #browser.get("http://www.ly.com/FlightQuery.aspx")#cookie保存在對象中,對需認證頁面可直接訪問 49 data=browser.page_source.encode("utf-8","ignore") 50 fh=open("E:/python27/qun.html","wb") 51 fh.write(data) 52 fh.close() 53 data2=browser.page_source 54 #print data2 55 a=browser.get_screenshot_as_file("E:/Python27/test.jpg") 56 #print(browser.page_source) 57 58 ''''後續能夠抓取一些東西''' 59 60 browser.quit()
關係:
selenium 自動化測試工具 :selnium 1.0 包括:selenium RC 、selenium IDE 、selenium GRID、selenium CORE
webdriver google的自動化測試框架(或者說是套規範API)
webdriver 與seleinum 各有優勢,兩個團隊都認爲合併會更牛逼,因而:
selenium 2.0 = selenium RC + webdriver
selenium 可使用多種語言實現:C# , java , python , ruby ....
環境搭建:
開始咱們的第一個腳本:
* 簡單對象定位:
操做對象:
WebElement 另外一些經常使用方法:
多層框架或窗口的定位:
智能等待:
調用js方法
execute_script(script, *args)
webdriver 原理分析
做者:今孝
出處:http://www.cnblogs.com/jinxiao-pu
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
參考連接:http://www.cnblogs.com/zzhzhao/p/5380376.html
http://www.cnblogs.com/BigFishFly/p/6380024.html