iT邦幫忙

0

VBA selenium 填資料到已打開 browser

  • 分享至 

  • xImage

請問一下用 vba + selenium 是否不能回填資料到已打開之頁面呢? 網上找到那個 localhost:9222 的方法不能夠應付已 "手動" 打開頁面回填資料的.請問還有什麼方法可用呢?

看更多先前的討論...收起先前的討論...
ccutmis iT邦高手 2 級 ‧ 2023-03-28 13:59:08 檢舉
python + pywin32 + pyautogui
blanksoul12 iT邦研究生 5 級 ‧ 2023-03-28 14:17:59 檢舉
謝謝你的回覆,但我只是前線非IT人員,vba + selenium 已是極限了
ccutmis iT邦高手 2 級 ‧ 2023-03-28 15:14:24 檢舉
其實沒有你想的那麼誇張 當你接觸過 python 你反而會覺得 用 vba + selenium 難度更高
froce iT邦大師 1 級 ‧ 2023-03-28 15:38:21 檢舉
用 SendKeys
https://stackoverflow.com/questions/73285409/vba-selenium-sending-keys
https://dotblogs.com.tw/twkhjl/2019/06/15/003910
改用power automate 試試
blanksoul12 iT邦研究生 5 級 ‧ 2023-03-29 08:30:57 檢舉
謝謝大家的回覆
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
ccutmis
iT邦高手 2 級 ‧ 2023-03-28 16:23:45

謝謝你的回覆,但我只是前線非IT人員,vba + selenium 已是極限了

衝著您這句話,我雞婆一點提供一個解決方案給你參考,這個範例需要的環境為:

  1. Python 3.x (安裝目前Python官網最新或次新的穩定版本就好)
  2. Python 依賴套件: pywin32 跟 pyautogui
  3. Visual Studio Code (非必需,但它可能會是你學習Python的好工具)

如果電腦先前還未安裝過 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。

希望有幫助!

看更多先前的回應...收起先前的回應...
blanksoul12 iT邦研究生 5 級 ‧ 2023-03-29 08:30:32 檢舉

謝謝你的回覆.

ccutmis iT邦高手 2 級 ‧ 2023-03-29 08:36:00 檢舉

不客氣 希望能幫上忙 ^^

blanksoul12 iT邦研究生 5 級 ‧ 2023-03-29 08:40:30 檢舉

你這個好像和 windows API 一樣? 找窗口 handle 再由窗口最前的位置找可用的 tap 來填東西.

ccutmis iT邦高手 2 級 ‧ 2023-03-29 08:54:54 檢舉

應該是同個東西,Python透過匯入不同模組可以擴充功能,這邊用到的是 win32api,如果有興趣研究更多的話可以Google搜'python win32api'。

blanksoul12 iT邦研究生 5 級 ‧ 2023-03-29 09:00:29 檢舉

windows API 我也有使用的,謝謝了

ccutmis iT邦高手 2 級 ‧ 2023-03-29 09:09:24 檢舉

你熟悉 windows API那就太好了,
我是不太熟XD 只是剛好寫過類似的東西,
就我自己的經驗,用VB在偵錯方面沒有Python方便,
VB能做的Python幾乎都能做到
(不敢說全部,因為我也沒有很熟VB)

我要發表回答

立即登入回答