Background

Selenium 是什麼?一句話,自動化測試工具。它支持各種瀏覽器,包括 Chrome,Safari,Firefox 等主流界面式瀏覽器,如果你在這些瀏覽器裡面安裝一個 Selenium 的插件,那麼便可以方便地實現Web界面的測試。換句話說叫 Selenium 支持這些瀏覽器驅動。話說回來,PhantomJS不也是一個瀏覽器嗎,那麼 Selenium 支持不?答案是肯定的,這樣二者便可以實現無縫對接了。

Selenium 2 是 Selenium 和 WebDriver 兩個項目的合併

Installation

pip3 install selenium

Start

run.py

from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://www.baidu.com/')

Crawler

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://www.cmoney.tw/finance/f00026.aspx?s=1101")
elem = driver.find_element_by_id("MainContent")

print(elem.text)
driver.quit()

那這個用法會打開瀏覽器, 然後在抓取你要的資料. 那其實這樣還是挺麻煩的. 當然是能不開瀏覽器就不開瀏覽器啊. 所以等一下還會介紹如何不打開瀏覽器就可以抓取資料.

API

記錄一下, 以後有需要也比較方便.

  • 單個元素
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
  • 多個元素
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

Selenium + PhantomJS

run.py

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get("https://www.cmoney.tw/finance/f00026.aspx?s=1101")
elem = driver.find_element_by_id("MainContent")

print(elem.text)
driver.quit()

如上面所提的, 我想寫個Crawler但並不想打開瀏覽器. 就把 Firefox 換成 PhantomJS 即可.

Reference