Reference:
selenium的frame和iframe定位、切入及切出情境:
用 python 自動登入設備抓韌體版本,提供後續風險管理,安排韌體更新期程。
實作:
以 Draytek Vigor為例,用 python + selenium 登入設備抓韌體版本。
●程式碼
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import time
# 設置 Chrome 瀏覽器選項,關閉通知
option = webdriver.ChromeOptions()
# 初始化 Chrome 瀏覽器
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=option)
# 打開網頁,按進階,繼續前往網站
driver.get("https://device_IP/")
driver.find_element(By.CSS_SELECTOR, 'button[id="details-button"]').click()
driver.find_element(By.CSS_SELECTOR, '#proceed-link').click()
# 輸入帳號和密碼,並點擊登入按鈕
account = 'user' # 替換為你的帳號
password = 'pass' # 替換為你的密碼
driver.find_element(By.CSS_SELECTOR, 'input[name="u5ern4me"]').send_keys(account)
driver.find_element(By.CSS_SELECTOR, 'input[name="pa55w0rd"]').send_keys(password)
driver.find_element(By.CSS_SELECTOR, 'input[name="btnOk"]').click()
time.sleep(10)
# 切換到 frame "main"
main = driver.find_element(By.NAME, 'main')
driver.switch_to.frame(main)
# 抓取table資料
getcontext = driver.find_element(By.XPATH, '/html/body/div/div[3]/div[1]/table')
print(getcontext.text)
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import time
# 設置 Chrome 瀏覽器選項,關閉通知
option = webdriver.ChromeOptions()
# 初始化 Chrome 瀏覽器
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=option)
# 打開網頁,按進階,繼續前往網站
driver.get("https://device_IP/")
driver.find_element(By.CSS_SELECTOR, 'button[id="details-button"]').click()
driver.find_element(By.CSS_SELECTOR, '#proceed-link').click()
# 輸入帳號和密碼,並點擊登入按鈕
account = 'user' # 替換為你的帳號
password = 'pass' # 替換為你的密碼
driver.find_element(By.CSS_SELECTOR, 'input[name="u5ern4me"]').send_keys(account)
driver.find_element(By.CSS_SELECTOR, 'input[name="pa55w0rd"]').send_keys(password)
driver.find_element(By.CSS_SELECTOR, 'input[name="btnOk"]').click()
time.sleep(10)
# 切換到 frame "main"
main = driver.find_element(By.NAME, 'main')
driver.switch_to.frame(main)
# 抓取table資料
getcontext = driver.find_element(By.XPATH, '/html/body/div/div[3]/div[1]/table')
print(getcontext.text)
●使用的工具
VScode 安裝 python, python debugger
安裝 python 套件 selenium (指令 pip install selenium)
測試執行狀況
如果沒有 name, id,可以使用XPATH
●這個網頁用frame,所以要多一個 切換到 frame 的步驟,否則會說找不到元件。
2024/10/30 update:
Python 的 selenium 时,报如下错误SSL error code 1, net_error -101在 option 下增加一行
option.add_experimental_option('excludeSwitches', ['enable-logging'])
沒有留言:
張貼留言