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

如何使用Selenium登录检测到自动化的SMBC信用卡网站?

解决SMBC信用卡网站Selenium登录问题

问题概述

  • 非无头模式下可正常输入账号密码,但无法定位到提交按钮
  • 改用密码框回车触发登录后,浏览器显示“Waiting for”无响应,疑似被网站的Selenium检测机制拦截
  • 已尝试伪造User-Agent、调整time.sleep时长,未解决问题
  • 使用版本:selenium==4.15.2,Python 3.11.6

用户示例代码:

from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

chrome_options = Options()
chrome_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537")

# TODO enable this to make headless
# chrome_options.add_argument("--headless")
driver = webdriver.Chrome(options=chrome_options)

driver.get("https://www.smbc-card.com/mem/index.jsp")
driver.implicitly_wait(0.5)

time.sleep(5)
driver.find_element(By.ID, "id_input").send_keys(USER)
driver.find_element(By.NAME, "password").send_keys(PASSWORD)
time.sleep(3)
driver.find_element(By.NAME, "password").send_keys(Keys.ENTER)
time.sleep(3)

解决方法

1. 添加反Selenium检测的Chrome配置

网站会通过识别Chrome的自动化特征拦截Selenium,需添加以下配置隐藏这些特征:

chrome_options = Options()
# 建议使用当前真实Chrome的UA,可在chrome://version/查看
chrome_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
# 禁用自动化提示与扩展
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
# 禁用自动化控制标识
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
# 无头模式需添加的配置(如果启用)
# chrome_options.add_argument("--headless=new")
# chrome_options.add_argument("--window-size=1920,1080")

2. 优化元素定位与等待策略

替换固定time.sleep为显式等待,确保元素完全加载后再操作,同时尝试通过表单提交替代回车或按钮点击:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.smbc-card.com/mem/index.jsp")

# 显式等待账号框加载
user_input = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "id_input"))
)
user_input.send_keys(USER)

# 显式等待密码框加载
pwd_input = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.NAME, "password"))
)
pwd_input.send_keys(PASSWORD)

# 尝试通过JS直接提交登录表单,绕过按钮定位问题
login_form = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//form"))
)
driver.execute_script("arguments[0].submit();", login_form)

# 等待页面跳转
time.sleep(5)

3. 模拟真实用户操作细节

  • 输入账号密码时添加随机间隔,模拟手动输入节奏:
import random

def slow_send_keys(element, text):
    for char in text:
        element.send_keys(char)
        time.sleep(random.uniform(0.1, 0.3))

slow_send_keys(user_input, USER)
slow_send_keys(pwd_input, PASSWORD)
  • 输入完成后可点击页面空白区域,再触发登录,更贴近手动操作逻辑。

4. 检查页面结构细节

  • 确认提交按钮是否嵌套在iframe中,若存在需先切换到对应iframe再定位元素:
# 遍历页面所有iframe尝试定位按钮
iframes = driver.find_elements(By.TAG_NAME, "iframe")
for iframe in iframes:
    driver.switch_to.frame(iframe)
    try:
        submit_btn = WebDriverWait(driver, 5).until(
            EC.element_to_be_clickable((By.XPATH, "//button[@type='submit']"))
        )
        submit_btn.click()
        break
    except:
        driver.switch_to.default_content()

内容的提问来源于stack exchange,提问作者maximum-warning

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:43:13