iT邦幫忙

2021 iThome 鐵人賽

DAY 18
1

前情提要

前一篇帶各位實際使用了匯率爬蟲並搭配 openpyxl 這個套件做到執行程式便可讀取在 excel 撰寫的幣種,爬取該幣種的匯率並更新至 excel。

開始之前

今天將與各位介紹 selenium 這個方便的動態爬蟲套件,撰寫 selenium 十分容易且懶人,就像在寫腳本,運行也與正常人類似(比較不會被反爬蟲擋)。在實際使用中,需要連結 webdriver 。

接下來請各位讀者先去下載對應 chrome 瀏覽器版本的 webdriver,記得要將 webdriver 放到專案路徑下(與 Python 程式同個路徑)。

https://chromedriver.chromium.org/downloads


接下來下載 Selenium

pipenv install selenium

開啟與進入網頁

可以執行該程式看是否會出現瀏覽器視窗。

from selenium import webdriver
driver = webdriver.Chrome()

進入網頁

driver.get(url)

查找元素

selenium 提供非常多種方法來鎖定元素,使用上也非常直白,以下列出鎖定單一元素的用法(若有多個符合回傳第一個)。

driver.find_element_by_id()
driver.find_element_by_name()
driver.find_element_by_xpath()
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text()
driver.find_element_by_tag_name()
driver.find_element_by_class_name()
driver.find_element_by_css_selector()

接下來列出可回傳所有的符合元素的用法,會回傳一個 list。其實也就是 element 後面加個 s。

driver.find_elements_by_name()
driver.find_elements_by_xpath()
driver.find_elements_by_link_text()
driver.find_elements_by_partial_link_text()
driver.find_elements_by_tag_name()
driver.find_elements_by_class_name()
driver.find_elements_by_css_selector()

操作

  • 傳入文字
element = driver.find_element_by_id("owo")
element.send_keys("password")
  • 清空文字
element = driver.find_element_by_id("owo")
element.clear()
  • 點擊按鈕
element = driver.find_element_by_id("button")
element.click()
  • 送出表單
element = driver.find_element_by_id("owo")
element.submit()

關閉

關閉視窗

driver.close()

關閉瀏覽器

driver.quit()

結語

今天帶各位稍微走過了一遍 Selenium 基本用法,熟用了以上用法其實就能模擬大部分使用者操作了,另外的用法將在之後與各位娓娓道來。

其實 Selenium 使用上十分容易,像極了寫腳本的過程,常用於模擬使用者的動態爬蟲。

明日內容

明天會帶各位實戰 Dcard 爬蟲,爬取 Dcard 上的文章,會讓爬蟲幫我們滑手機歐><。

補充資料

Selenium with Python docs : https://selenium-python.readthedocs.io/

Selenium docs : https://readthedocs.org/projects/selenium-python/downloads/pdf/latest/


上一篇
【Day 17】- 手動更新匯率太麻煩了! 匯率爬蟲搭配 OpenPyXL 做到自動讀取&更新匯率!
下一篇
【Day 19】- 讓 Selenium 去 Dcard 上爬文! (實戰 Selenium 模擬使用者划手機 1/2)
系列文
網路爬蟲,萬物皆爬 - 30 天搞懂並實戰網路爬蟲及應對反爬蟲技術30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言