8-1 selenium動態網頁請求與模擬登錄知乎
Ⅰ、介紹selenium
1.什么是selenium:selenium百度百科
2.selenium的構架圖:
如果要操作瀏覽器,還需要一個drive。
Ⅱ、安裝selenium
1.可以 pip install selenium。
2.找selenium的文檔(比較難找)。
如圖:
找到Drive,下載對應瀏覽器的drive,推薦用chrome(如果打不開就要VPN下載)
Ⅲ、使用selenium
1 # -*- coding: utf-8 -*- 2 3 from selenium import webdriver 4 from scrapy.selector import Selector 5 6 7 #知乎的模擬登錄 8 browser = webdriver.Chrome(executable_path="E:/chromedriver.exe") #路徑是chromedriver.exe的存放的位置 9 browser.get("https://www.zhihu.com/#signin") 10 browser.find_element_by_css_selector(".view-signin input[name='account']").send_keys("********") #帳號 11 browser.find_element_by_css_selector(".view-signin input[name='password']").send_keys("********") #密碼 12 browser.find_element_by_id("captcha").send_keys(input('請輸入驗證碼:')) 13 browser.find_element_by_css_selector(".view-signin button.sign-button").click() #登錄 14 browser.quit() 15 16 17 #可以用selenium得到js加載后的html,比如這樣的話可以抓取到本來抓取的不到的一些字段(淘寶的交易量等等) 18 browser = webdriver.Chrome(executable_path="E:/chromedriver.exe") 19 browser.get("https://detail.tmall.com/item.htm?spm=a230r.1.14.3.yYBVG6&id=538286972599&cm_id=140105335569ed55e27b&abbucket=15&sku_properties=10004:709990523;5919063:6536025") 20 print(browser.page_source) #page_source就是js加載完的源代碼 21 #browser.quit() 22 ''' 23 如果是用selenium本身的選擇器(python寫的,比較慢),會很慢 24 所以現在轉換成scrapy中的selector(他是用c語言寫的,很快) 25 模版,也可以嵌入scrapy中 26 ''' 27 t_selector=Selector(text=browser.page_source) 28 print(t_selector.xpath('//*[@id="J_StrPriceModBox"]/dd/span/text()').extract())
有時候取不到內容,看看是不是還沒有加載完,在中間sleeep幾秒就好了。
8-2 selenium模擬登錄微博, 模擬鼠標下拉
微博也有開放的API:http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5
1 #selenium 完成微博模擬登錄 2 browser = webdriver.Chrome(executable_path="E:/chromedriver.exe") 3 browser.get("http://weibo.com/") 4 import time 5 time.sleep(5) 6 browser.find_element_by_css_selector("#loginname").send_keys("******") 7 browser.find_element_by_css_selector(".info_list.password input[node-type='password']").send_keys("******") 8 browser.find_element_by_css_selector(".info_list.login_btn a[node-type='submitBtn']").click() 9 #下拉 10 for i in range(3): 11 '''三次下拉操作,這是javascript的知識''' 12 browser.execute_script("window.scrollTo(0, document.body.scrollHeight); var lenOfPage=document.body.scrollHeight; return lenOfPage;") 13 time.sleep(3)
8-3 chromedriver不加載圖片、phantomjs獲取動態網頁
chromedriver不加載圖片:
1 #設置chromedriver不加載圖片 2 #是固定的模版 3 chrome_opt = webdriver.ChromeOptions() 4 prefs = {"profile.managed_default_content_settings.images":2} 5 chrome_opt.add_experimental_option("prefs", prefs) 6 browser = webdriver.Chrome(executable_path="E:/chromedriver.exe",chrome_options=chrome_opt) 7 browser.get("http://weibo.com/")
phantomjs獲取動態網頁:
下載地址:http://phantomjs.org/download.html 如果不能下載,復制鏈接到迅雷下載
淘寶的詳情頁實例
1 #phantomjs, 無界面的瀏覽器, 多進程情況下phantomjs性能會下降很嚴重 2 browser = webdriver.PhantomJS(executable_path="F:/迅雷下載/phantomjs-2.1.1-windows/bin/phantomjs.exe") 3 browser.get("https://detail.tmall.com/item.htm?spm=a230r.1.14.3.yYBVG6&id=538286972599&cm_id=140105335569ed55e27b&abbucket=15&sku_properties=10004:709990523;5919063:6536025") 4 print (browser.page_source) 5 browser.quit()
需要代碼匯總請移步我的github:https://github.com/pujinxiao/project_pjx/blob/master/s0vkaq/ArticleSpider/tools/selenium_spider.py
關於selenium的我推薦蟲師的教程,還是很不錯的。「UI 測試自動化selenium」匯總
作者:今孝
出處:http://www.cnblogs.com/jinxiao-pu/p/6809583.html
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。