You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium工业相机网页自动登录脚本故障排查求助

工业相机网页登录自动化脚本故障排查

我正在用Python结合Selenium编写脚本,自动打开工业相机的网页并完成登录查看内容。脚本能打开Chrome并导航到目标页面,但延迟后窗口直接关闭,始终无法完成登录。试过用HTML元素的ID、name作为定位器,都没解决问题。

我的Python代码

import time
from selenium import webdriver
# import yaml

# conf = yaml.load(open('loginDetails.yml'))
# myLogin = conf['camera_user']['username']
# myPassword = conf['camera_user']['password']
myLogin = "operator"
myPassword = ""


driver = webdriver.Chrome()

def login(url,usernameId, username, passwordId, password, submit_buttonId):
   driver.get(url)
   driver.find_element(usernameId).send_keys(username)
   driver.find_element(passwordId).send_keys(password)
   driver.find_element(submit_buttonId).click()

login("http://192.168.0.60/pages/hmi/", "dc608255-0d87-4f6e-9115-62d8621f104c", myLogin, "03b9beea-df2a-4738-a3a9-d2d4ec1c5517", myPassword, "75ec946e-6c5d-4e6c-8429-75161a1cc83b")

运行时的堆栈跟踪信息

(No symbol) [0x00007FF60309BA4C]
(No symbol) [0x00007FF60307B983]
(No symbol) [0x00007FF603047628]
(No symbol) [0x00007FF603048791]
GetHandleVerifier [0x00007FF6034EA00D+3161901]
GetHandleVerifier [0x00007FF60353E060+3506048]
GetHandleVerifier [0x00007FF60353400D+3465005]
GetHandleVerifier [0x00007FF6032B0EEB+830987]
(No symbol) [0x00007FF60316467F]
(No symbol) [0x00007FF6031609D4]
(No symbol) [0x00007FF603160B6D]
(No symbol) [0x00007FF603150149]
BaseThreadInitThunk [0x00007FFE53BB7374+20]
RtlUserThreadStart [0x00007FFE5483CC91+33]

PS C:\Users\pjw56q> & C:/Users/pjw56q/AppData/Local/Programs/Python/Python311/python.exe d:/cameralogin/WebsitesLoginAutomation.py

DevTools listening on ws://127.0.0.1:49281/devtools/browser/5c9bc2ed-a98a-43e6-99fe-e2fb16d04ee9
Traceback (most recent call last):
  File "d:\cameralogin\WebsitesLoginAutomation.py", line 21, in <module>
    login("http://192.168.0.60/pages/hmi/", "UserTextBox", myLogin, "PasswordTextBox", myPassword, "LoginButton")
  File "d:\cameralogin\WebsitesLoginAutomation.py", line 17, in login
    driver.find_element(usernameId).send_keys(username)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\pjw56q\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 766, in find_element
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\pjw56q\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 380, in execute
    self.error_handler.check_response(response)
  File "C:\Users\pjw56q\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 229, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid locator
  (Session info: chrome=130.0.6723.70)
Stacktrace:
        GetHandleVerifier [0x00007FF6034C38A5+3004357]
        (No symbol) [0x00007FF603159970]
        (No symbol) [0x00007FF60300582A]
        (No symbol) [0x00007FF603055945]
        (No symbol) [0x00007FF603055E7C]
        (No symbol) [0x00007FF60309EC27]
        (No symbol) [0x00007FF60307BC1F]
        (No symbol) [0x00007FF60309BA4C]
        (No symbol) [0x00007FF60307B983]
        (No symbol) [0x00007FF603047628]
        (No symbol) [0x00007FF603048791]
        GetHandleVerifier [0x00007FF6034EA00D+3161901]
        GetHandleVerifier [0x00007FF60353E060+3506048]
        GetHandleVerifier [0x00007FF60353400D+3465005]
        GetHandleVerifier [0x00007FF6032B0EEB+830987]
        (No symbol) [0x00007FF60316467F]
        (No symbol) [0x00007FF6031609D4]
        (No symbol) [0x00007FF603160B6D]
        (No symbol) [0x00007FF603150149]
        BaseThreadInitThunk [0x00007FFE53BB7374+20]
        RtlUserThreadStart [0x00007FFE5483CC91+33]

故障排查与修复方案

1. 定位器参数错误(核心问题)

Selenium 4+版本的find_element方法需要传入两个参数:定位方式和定位值,你当前只传了一个字符串,导致"invalid locator"错误。需要:

  • 导入By类:from selenium.webdriver.common.by import By
  • 修改find_element调用方式,比如:
    driver.find_element(By.ID, usernameId).send_keys(username)
    

2. 元素加载延迟问题

页面可能还没完全加载就执行元素查找,导致找不到元素。建议用显式等待替代直接查找:

  • 导入等待相关模块:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
  • 修改登录函数中的查找逻辑:
    def login(url,usernameId, username, passwordId, password, submit_buttonId):
        driver.get(url)
        # 等待用户名输入框加载完成
        username_box = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, usernameId)))
        username_box.send_keys(username)
        # 等待密码输入框加载完成
        password_box = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, passwordId)))
        password_box.send_keys(password)
        # 等待登录按钮加载完成并点击
        login_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, submit_buttonId)))
        login_btn.click()
    

3. 窗口自动关闭问题

脚本执行完毕后,ChromeDriver会自动关闭浏览器窗口。如果需要保留窗口查看结果,可以:

  • 在脚本末尾添加延迟:time.sleep(10)
  • 或者手动控制退出时机:driver.quit()(按需调用)

4. 验证定位器有效性

在浏览器开发者工具的控制台中,手动验证定位器是否能找到元素:

  • 验证ID定位:document.getElementById("dc608255-0d87-4f6e-9115-62d8621f104c")
  • 验证name定位:document.getElementsByName("xxx")
    如果控制台返回null,说明定位器无效,需要重新获取正确的元素属性。

修改后的完整示例代码

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

myLogin = "operator"
myPassword = ""

driver = webdriver.Chrome()

def login(url,usernameId, username, passwordId, password, submit_buttonId):
    driver.get(url)
    # 等待并填写用户名
    username_box = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, usernameId)))
    username_box.send_keys(username)
    # 等待并填写密码
    password_box = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, passwordId)))
    password_box.send_keys(password)
    # 等待并点击登录按钮
    login_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, submit_buttonId)))
    login_btn.click()

login("http://192.168.0.60/pages/hmi/", "dc608255-0d87-4f6e-9115-62d8621f104c", myLogin, "03b9beea-df2a-4738-a3a9-d2d4ec1c5517", myPassword, "75ec946e-6c5d-4e6c-8429-75161a1cc83b")

# 延迟10秒后关闭窗口,可根据需求调整
time.sleep(10)
driver.quit()

内容的提问来源于stack exchange,提问作者Anthony Howard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:38:11