1. 程式人生 > >selenium和PhantomJS爬取動態網頁

selenium和PhantomJS爬取動態網頁

一、selenium和PhantomJS用法簡介

selenium是web的自動化測試工具,類似按鍵精靈,可以直接執行在瀏覽器上。

pip install selenium


PhantomJS是基於webkit的無介面瀏覽器,使用時,無需輸入header等。

需要從 phantomjs.org處下載,再將bin目錄新增到環境變數path中。

1.1 基本使用流程

"""基本流程"""
from selenium import webdriver

#要想呼叫鍵盤操作需要引入keys包
from selenium.webdriver.common.keys import Keys

#呼叫環境變數指定的PhantomJS瀏覽器建立瀏覽器物件
driver = webdriver.PhantomJS()
#如果沒有在環境變數指定PhantomJS位置
#driver = webdriver.PhantomJS(executable_path="F:\phantomjs\phantomjs-2.1.1-windows\bin")

#get方法會一直等到頁面被完全載入,然後才會繼續程式
#通常測試會在這裡選擇time.sleep(2)
driver.get("http://www.baidu.com")

'''具體的操作,仿人為上網'''

#關閉當前網頁,如果只有一個頁面,會關閉瀏覽器
#driver.close()

#關閉瀏覽器
driver.quit()

1.2 網頁資訊顯示

"""網頁資訊"""
#列印頁面標題“百度一下,你就知道”
str_ = driver.title

#獲取當前網頁的原始碼
str_html = driver.page_source

#獲取當前網頁的cookie
cookies = driver.get_cookies()
cookies['name']
cookies['value']

#獲取當前網頁的url
str_ = driver.current_url


1.3 鍵盤操作

"""鍵盤操作"""
#要想呼叫鍵盤操作需要引入keys包
from selenium.webdriver.common.keys import Keys

#獲取頁面名為wrapper的id標籤的文字內容
data = driver.find_element_by_id("wrapper").text
#除了by_id之外,還有by_name, by_xpath, by_class_name等
#其中,element選取的是一個,elements選出的是全部。
#這個類似bs4

#生成當前頁面的快照並儲存
driver.save_screenshot("baidu.png")

#id="su"是百度搜索按鈕,click()是模擬點選
driver.find_element_by_id("su").click()
#click之後需要等待幾秒,等待網頁響應。
time.sleep(2)
driver.save_screenshot("click.png")

#id="kw"是百度搜索輸入框,輸入字串“長城”
driver.find_element_by_id("kw").send_keys(u"長城")
driver.save_screenshot("input.png")

#ctrl+a全選輸入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')

#模擬ENTER回車鍵
driver.find_element_by_id("kw").send_keys(Keys.RETURN)

#清空輸入框
driver.find_element_by_id("kw").clear()


1.4 滑鼠操作

"""滑鼠操作"""
#匯入類
from selenium.webdriver import ActionChains

#滑鼠移動到某個位置
ac = driver.find_element_by_xpath('element')
ActionChains(driver).move_to_element(ac).perform()

#單擊,(操作滑鼠,移到某處,點選,顯示效果)
ac = driver.find_element_by_xpath('element')
ActionChains(driver).move_to_element(ac).click(ac).perform()
#或者可以driver.find_element_by_xpath('element').click()

#雙擊
ac = driver.find_element_by_xpath('element')
ActionChains(driver).move_to_element(ac).double_click(ac).perform()

#右擊
ac = driver.find_element_by_xpath('element')
ActionChains(driver).move_to_element(ac).context_click(ac).perform()

1.5 其他操作

"""執行JavaScript語句"""
js='document.body.scrollTop=10000'#向下滾動10000畫素
driver.execute_script(js)

二、示例:鬥魚房間人數爬取

# -*- coding:utf-8 -*-

import unittest
from selenium import webdriver
from lxml import etree

class douyu(unittest.TestCase):
    # 初始化方法,必須是setUp()
    def setUp(self):
        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:
            content = etree.HTML(self.driver.page_source)
            # 房間名, 返回列表
            names = content.xpath('//h3[@class="ellipsis"]')
            # 觀眾人數, 返回列表
            numbers = content.xpath('//span[@class="dy-num fr"]')

            # zip(names, numbers) 將name和number這兩個列表合併為一個元組 : [(1, 2), (3, 4)...]
            for name, number in zip(names, numbers):
                print( u"觀眾人數: -" + number.text.strip() + u"-\t房間名: " + name.text.strip())
                self.num += 1

            # 如果在頁面原始碼裡找到"下一頁"為隱藏的標籤,就退出迴圈
            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()


相關推薦

[Python爬蟲]Scrapy配合SeleniumPhantomJS動態網頁

Python世界中Scrapy一直是爬蟲的一個較為成熟的解決方案,目前javascript在網頁中應用越來越廣泛,越來越多的網站選擇使用javascript動態的生成網頁的內容,使得很多純html的爬蟲解決方案失效。針對這種動態網站的爬取,目前也有很多解決方案。

seleniumPhantomJS動態網頁

一、selenium和PhantomJS用法簡介 selenium是web的自動化測試工具,類似按鍵精靈,可以直接執行在瀏覽器上。 pip install selenium PhantomJS是基於

動態網頁Selenium

如何 瀏覽器 要去 nbsp ges selenium 安全性 接口 比較 參考:http://blog.csdn.net/wgyscsf/article/details/53454910 概述 在爬蟲過程中,一般情況下都是直接解析html源碼進行分析解析即可。但是

Python3+Selenium動態網頁資料

背景: 有時候想獲取網頁的資訊,然後下載裡面的圖片資料等等 遇到的問題: 有時一些網頁是動態的,一些內容是通過js非同步拉取,甚至拉取時間是懶載入的,例如滾動到元素位置的時候才載入 解決方案: 這個時候就需要Selenium神器了 Selenium 是什麼?一句話

Python使用selenium動態網頁時遇到的問題

我們在做京東手機資訊的爬取時,遇到的一些問題,現在就來跟大家分享一下。 1.首先,京東的網頁是動態的,當我們搜尋一個商品時,需要把頁面往下翻,下面的內容才會出來,這也是我們選selenium方法的原因 解決方法:讓瀏覽器模擬下拉幾次頁面即可 from selen

使用Selenium動態網頁

使用selenium優點:所見既所得 通過page_source屬性可以獲得網頁原始碼 selenium可以驅動瀏覽器完成各種操作,如填充表單、模擬點選等。 獲取單個節點的方法: find_element_by_id find_element_by_na

使用selenium結合PhantomJS淘寶美食並存儲到MongoDB

cnblogs exc cte ota browser -- pre command out PhantomJS是一種沒有界面的瀏覽器,便於爬蟲 1、PhantomJS下載 2、phantomjs無須安裝driver,還有具體的api參考: http://phantomj

動態網頁中關於構造瀏覽器頭的註意事項

rand 服務器 mage 地址 span gzip 原來 動態網頁 ati 在原來爬取動態網頁圖片中,獲取到了圖片的實際地址,但是下載下來的圖片是損壞的,究其原因,是服務器端阻止了訪問,但是觀察發現 headers = {‘User-Agent‘: random.cho

網路爬蟲:動態網頁

import requests from bs4 import BeautifulSoup res = requests.get('http://news.sina.com.cn/c/nd/2017-06-12/doc-ifyfzhac1650783.shtml') res.encoding = '

python 動態網頁(百度圖片)

# python 3.6.3 import re import os from urllib import parse from urllib import request ################################################### # 搜尋關鍵字

python 使用seleniumrequests頁面資料

目的:獲取某網站某使用者下市場大於1000秒的視訊資訊 1.本想通過介面獲得結果,但是使用post傳送資訊到介面,提示服務端錯誤。 2.通過requests獲取頁面結果,使用html解析工具,發現麻煩而且得不到想要的結果 3.直接通過selenium獲取控制元件的屬性資訊,如圖片、視訊地址,再對時間進行篩選

python 使用seleniumrequests頁面數據

ret pre tex 爬取 test user 發現 rom request 目的:獲取某網站某用戶下市場大於1000秒的視頻信息 1.本想通過接口獲得結果,但是使用post發送信息到接口,提示服務端錯誤。 2.通過requests獲取頁面結果,使用html解析工具,發現

R語言動態網頁之環境準備

   在R實現pm2.5地圖資料展示文章中,使用rvest包實現了靜態頁面的資料抓取,然而rvest只能抓取靜態網頁,而諸如ajax非同步載入的動態網頁結構無能為力。在R語言中,爬取這類網頁可以使用RSelenium包和Rwebdriver包。   RSelenium包和Rwebdriver包都是

Python3網路爬蟲:Scrapy入門實戰之動態網頁圖片

Python版本: python3.+ 執行環境: Mac OS IDE: pycharm 一 前言 二 Scrapy相關方法介紹 1 搭建Scrapy專案 2 shell分析 三 網頁分析

Python3網路爬蟲:requests動態網頁內容

本文為學習筆記 學習博主:http://blog.csdn.net/c406495762 Python版本:python3.+ 執行環境:OSX IDE:pycharm 一、工具準備 抓包工具:在OSX下,我使用的是Charles4.0 下載連結以及安裝教

Python如何動態網頁資料

1.引言   說到爬網頁,我們一般的操作是先檢視原始碼或者審查元素,找到資訊所在節點,然後用 beautifulsoup/xpth/re 來獲取資料,這是我們對付靜態網頁的常用手段。   但大家也知

一起學爬蟲 Node.js 爬蟲篇(三)使用 PhantomJS 動態頁面

今天我們來學習如何使用 PhantomJS 來抓取動態網頁,至於 PhantomJS 是啥啊什麼的,看這裡 我們這裡就不再討論 PhantomJS 的入門基礎了。下面正題 1.我們先準備,開啟瀏覽器,輸入網址 http://news.163

nodejs 動態網頁

前言 準備工作 建立工程 後記 前言 昨天實現了草榴的爬取 nodejs 做一個簡單的爬蟲爬草榴,今天對程式碼做了一部分修改,增加了可以指定開始頁和結束頁,並且給所有檔案都單獨建立了資料夾。那麼問題來了,說好的爬 街拍圖

python動態網頁

還記得在之前一篇python開發電影查詢系統(一)—python實現後臺資料中,對電影的下載地址無法進行爬取,原因是下載地址在網頁原始碼中無法檢視,而是存放在js中,動態載入了。所以在爬取時,我在文章中寫道 現在,我們找到了攻破他反爬的方法。下面我來詳細介

爬蟲動態網頁下載美女圖片

scrapy爬取動態網頁下載圖片 靜態頁面練習了後,我們開始來爬取動態頁面,為了滿足廣大程式猿的需求,在這裡就選擇360圖片吧,網址是image.so.com。希望大家學會後身體一天不如一天。 首先我們來分析這個網頁,開啟開發者工具,滑動頁面等加載出新的圖片