2024年3月26日 星期二

Python 學習筆記 : 在樹莓派上安裝 Selenium 與 Web Driver

由於在 Win11 上安裝 Selenium + Web Driver 時遇到版本匹配問題, 所以我轉而到要佈署爬蟲的樹莓派 Pi 3 上直接開發. 本系列之前的文章參考 :


由於樹莓派內建的是 Chromium 瀏覽器, Chrome 的 Web Driver 應該是沒辦法直接用在樹莓派, 所幸找到下面這篇好文章 :


那就來依樣畫葫蘆實作看看唄. 


一. 下載安裝 chromium-chromedriver 驅動程式 : 

Chromium 的驅動程式可從下列網址下載 :


可用 wget 下載驅動程式的 deb 檔 : 

pi@raspberrypi:~ $ wget http://launchpadlibrarian.net/361669488/chromium-chromedriver_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb   
--2024-03-26 14:26:31--  http://launchpadlibrarian.net/361669488/chromium-chromedriver_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb
正在查找主機 launchpadlibrarian.net (launchpadlibrarian.net)... 185.125.189.229, 185.125.189.228, 2620:2d:4000:1009::13e, ...
正在連接 launchpadlibrarian.net (launchpadlibrarian.net)|185.125.189.229|:80... 連上了。
已送出 HTTP 要求,正在等候回應... 200 OK
長度: 2787410 (2.7M) [application/x-debian-package]
Saving to: ‘chromium-chromedriver_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb’

chromium-chromedriver_65. 100%[====================================>]   2.66M   643KB/s    in 4.2s    

2024-03-26 14:26:36 (643 KB/s) - ‘chromium-chromedriver_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb’ saved [2787410/2787410]

再用 sudo dpkg 安裝驅動程式 : 

pi@raspberrypi:~ $ sudo dpkg -i chromium-chromedriver_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb 
選取了原先未選的套件 chromium-chromedriver。
(讀取資料庫 ... 目前共安裝了 142836 個檔案和目錄。)
Preparing to unpack chromium-chromedriver_65.0.3325.181-0ubuntu0.14.04.1_armhf.deb ...
Unpacking chromium-chromedriver (65.0.3325.181-0ubuntu0.14.04.1) ...
設定 chromium-chromedriver (65.0.3325.181-0ubuntu0.14.04.1) ...


二. 建立 WebDriver 物件 : 

先進入 Python 執行環境 : 

pi@raspberrypi:~ $ python3 
Python 3.5.3 (default, Sep 27 2018, 17:25:39) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.

從 selenium 套件匯入 webdriver 模組 : 

>>> from selenium import webdriver    
>>> webdriver.__version__    
'3.14.1'   

呼叫 webdriver 的 Chrome 類別建構式 Chrome() 以建立 WebDriver 物件 : 

>>> browser=webdriver.Chrome('/usr/lib/chromium-browser/chromedriver')   
>>> type(browser)     
<class 'selenium.webdriver.chrome.webdriver.WebDriver'>

用 dir() 檢視 WebDriver 物件之內容 : 

>>> dir(browser)   
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_file_detector', '_is_remote', '_mobile', '_switch_to', '_unwrap_value', '_web_element_cls', '_wrap_value', 'add_cookie', 'application_cache', 'back', 'capabilities', 'close', 'command_executor', 'create_options', 'create_web_element', 'current_url', 'current_window_handle', 'delete_all_cookies', 'delete_cookie', 'desired_capabilities', 'error_handler', 'execute', 'execute_async_script', 'execute_cdp_cmd', 'execute_script', 'file_detector', 'file_detector_context', 'find_element', 'find_element_by_class_name', 'find_element_by_css_selector', 'find_element_by_id', 'find_element_by_link_text', 'find_element_by_name', 'find_element_by_partial_link_text', 'find_element_by_tag_name', 'find_element_by_xpath', 'find_elements', 'find_elements_by_class_name', 'find_elements_by_css_selector', 'find_elements_by_id', 'find_elements_by_link_text', 'find_elements_by_name', 'find_elements_by_partial_link_text', 'find_elements_by_tag_name', 'find_elements_by_xpath', 'forward', 'fullscreen_window', 'get', 'get_cookie', 'get_cookies', 'get_log', 'get_network_conditions', 'get_screenshot_as_base64', 'get_screenshot_as_file', 'get_screenshot_as_png', 'get_window_position', 'get_window_rect', 'get_window_size', 'implicitly_wait', 'launch_app', 'log_types', 'maximize_window', 'minimize_window', 'mobile', 'name', 'orientation', 'page_source', 'quit', 'refresh', 'save_screenshot', 'service', 'session_id', 'set_network_conditions', 'set_page_load_timeout', 'set_script_timeout', 'set_window_position', 'set_window_rect', 'set_window_size', 'start_client', 'start_session', 'stop_client', 'switch_to', 'switch_to_active_element', 'switch_to_alert', 'switch_to_default_content', 'switch_to_frame', 'switch_to_window', 'title', 'w3c', 'window_handles']

其中的 get() 方法用來開啟網頁, 例如 : 

>>> browser.get('https://tw.yahoo.com')   



沒有留言:

張貼留言