請問一下用 vba + selenium 是否不能回填資料到已打開之頁面呢? 網上找到那個 localhost:9222 的方法不能夠應付已 "手動" 打開頁面回填資料的.請問還有什麼方法可用呢?
謝謝你的回覆,但我只是前線非IT人員,vba + selenium 已是極限了
衝著您這句話,我雞婆一點提供一個解決方案給你參考,這個範例需要的環境為:
如果電腦先前還未安裝過 Python 及 Visual Studio Code 請先看這篇,並將內容提到的軟體及設定檔案部署到你的電腦上:
https://ccutmis.github.io/study-coding/vscode-for-python.htm
到這裡你的電腦已經可以用來編寫 Python 程式了,現在我們要安裝 Python 依賴套件 pywin32 跟 pyautogui,首先按 Win + R 在 執行裡面輸入 "cmd" 然後按 Enter 開啟命令提示字元(簡稱cmd ),接著在 cmd 輸入:
pip install pywin32 pyautogui
然後按 Enter 就會安裝 pywin32 跟 pyautogui 這兩個套件,pywin32套件用來處理呼叫視窗有關的功能,pyautogui套件用來處理滑鼠鍵盤操控的功能,你可以在C碟底下新建一個資料夾"TEST123",然後在裡面新增一個檔案"test.py",然後將下列的範例貼進"test.py"內:
# 這是註解
# PYAUTOGUI 官方文檔 : https://pyautogui.readthedocs.io/en/latest/
# 安裝 win32gui 模組 : pip install pywin32 或 pip install --upgrade pywin32==224
import win32gui, win32con
import pyautogui as pag
import re
import time
# class WindowMgr 範例來源:
# https://stackoverflow.com/questions/2090464/python-window-activation
class WindowMgr:
"""Encapsulates some calls to the winapi for window management"""
def __init__ (self):
"""Constructor"""
self._handle = None
def find_window(self, class_name, window_name=None):
"""find a window by its class_name"""
self._handle = win32gui.FindWindow(class_name, window_name)
def _window_enum_callback(self, hwnd, wildcard):
"""Pass to win32gui.EnumWindows() to check all the opened windows"""
if re.match(wildcard, str(win32gui.GetWindowText(hwnd))) is not None:
self._handle = hwnd
def find_window_wildcard(self, wildcard):
"""find a window whose title matches the wildcard regex"""
self._handle = None
win32gui.EnumWindows(self._window_enum_callback, wildcard)
def set_foreground(self):
"""put the window in the foreground"""
win32gui.SetForegroundWindow(self._handle)
def set_window_state_max(self):
"""將視窗最大化"""
win32gui.ShowWindow(self._handle, win32con.SW_SHOWMAXIMIZED)
# 上面這一大段都不需要動
# 這段用途是將已開啟的 Google Chrome 瀏覽器設為前景
w = WindowMgr()
w.find_window_wildcard(".*Google*")
w.set_foreground()
w.set_window_state_max()
# 這段用途是輸入網址按 enter送出然後等候十秒
pag.hotkey("alt","d")
pag.typewrite("https://ccutmis.github.io/tmp/test_form.htm", interval=0.25)
pag.press('enter')
time.sleep(10)
w.set_foreground() # 將已開啟的 Google Chrome 瀏覽器設為前景
pag.click(50,50) # 在螢幕上的(50,50)位置點一下左鍵,主要是為了讓網頁處於Fucos狀態
# 接下來就是內容部份操控的範例,按一下tab輸入帳號,再按一下tab輸入密碼,再按一下tab
# 這時焦點是在TEST按鈕上,然後按ENTER就看到它觸發了TEST按鈕上面的javascript
pag.press('tab')
pag.typewrite("Hello World!", interval=0.25)
pag.press('tab')
pag.typewrite("You can't see!", interval=0.25)
pag.press('tab')
pag.press('enter')
將 "test.py" 存檔,然後先開啟 Google Chrome 網頁(限於篇幅就不示範用Python處理 Chrome 未開啟時的作法)放在旁邊不要理它,開啟檔檔案總管找到你剛才編輯並存檔的 "test.py" 直接對它點兩下然後它就會開始演示 : 叫出Chrome視窗,輸入網址轉到demo網頁,然後輸入帳號密碼並按下Enter。
註: 測試前請先確定輸入法切換到英文。
你可以依照上面的範例跟PYAUTOGUI官網的說明試著去實現你要的功能,執行起來就跟 Autoit 這套軟體差不多了。對了,如果你真的不想用 Python ,那也可以試試 Autoit。
希望有幫助!