1. 程式人生 > >3-Python爬蟲-動態HTML/Selenium+PhantomJS/chrome無頭瀏覽器-chromedriver

3-Python爬蟲-動態HTML/Selenium+PhantomJS/chrome無頭瀏覽器-chromedriver

動態HTML

爬蟲跟反爬蟲

動態HTML介紹

  • JavaScrapt
  • jQuery
  • Ajax
  • DHTML
  • Python採集動態資料
    • 從Javascript程式碼入手採集
    • Python第三方庫執行JavaScript,直接採集你在瀏覽器看到的頁面

Selenium + PhantomJS

  • Selenium: web自動化測試工具
  • PhantomJS(幽靈)
  • Selenium 庫有有一個WebDriver的API
  • WebDriver可以跟頁面上的元素進行各種互動,用它可以來進行爬取
  • 案例 v36
  • chrome + chromedriver
    • 下載安裝chrome: 下載+安裝
    • 下載安裝chromedriver:
  • Selenium操作主要分兩大類:
    • 得到UI元素
      • find_element_by_id
      • find_elements_by_name
      • find_elements_by_xpath
      • find_elements_by_link_text
      • find_elements_by_partial_link_text
      • find_elements_by_tag_name
      • find_elements_by_class_name
      • find_elements_by_css_selector
    • 基於UI元素操作的模擬
      • 單擊
      • 右鍵
      • 拖拽
      • 輸入
      • 可以通過匯入ActionsChains類來做到
    • 案例37

      案例v36
      ```
      '''
      通過webdriver操作進行查詢1
      '''

from selenium import webdriver
import time

通過Keys模擬鍵盤

from selenium.webdriver.common.keys import Keys

操作哪個瀏覽器就對哪個瀏覽器建一個例項

自動按照環境變數查詢相應的瀏覽器

driver = webdriver.PhantomJS()

如果瀏覽器沒有在相應環境變數中,需要指定瀏覽器位置

driver.get("http://www.baidu.com")

通過函式查詢title標籤

print("Title: {0}".format(driver.title))


**案例v37**

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys

可能需要手動新增路徑

driver = webdriver.Chrome()

url = "http://www.baidu.com"

driver.get(url)

text = driver.find_element_by_id('wrapper').text
print(text)
print(driver.title)

得到頁面的快照

driver.save_screenshot('index.png')

id="kw" 的是百度的輸入框,我們得到輸入框的ui元素後直接輸入“大熊貓"

driver.find_element_by_id('kw').send_keys(u"大熊貓")

id="su"是百度搜索的按鈕,click模擬點選

driver.find_element_by_id('su').click()

time.sleep(5)
driver.save_screenshot("daxiongmao.png")

獲取當前頁面的cookie

print(driver.get_cookies())

模擬輸入兩個按鍵 ctrl+ a

driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')

ctr+x 是剪下快捷鍵

driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'x')

driver.find_element_by_id('kw').send_keys(u'航空母艦')
driver.save_screenshot('hangmu.png')

driver.find_element_by_id('su').send_keys(Keys.RETURN)

time.sleep(5)
driver.save_screenshot('hangmu2.png')

清空輸入框 , clear

driver.find_element_by_id('kw').clear()
driver.save_screenshot('clear.png')

關閉瀏覽器

driver.quit()
```