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

Paypal Selenium自动化:Cookie弹窗异常及支付按钮定位失效求助

PayPal插件更新导致Selenium自动化失效问题

近期PayPal更新插件后,我的Selenium自动化代码无法正常运行:

  • 使用Selenium IDE录制操作时,未出现Accept Cookie弹窗
  • 登录步骤可正常执行,但尝试多种方法都无法定位并操作payment-submit-btn支付提交按钮

相关代码

public IDictionary<string, object> vars { get; private set; }
vars = new Dictionary<string, object>();
_driver.SwitchTo().Frame(0);
vars["WindowHandles"] = _driver.WindowHandles;
_driver.FindElement(By.CssSelector(".paypal-button")).Click();
vars["win8061"] = waitForWindow(2000);
vars["root"] = _driver.CurrentWindowHandle;
_driver.SwitchTo().Window(vars["win8061"].ToString());
_driver.FindElement(By.Id("email")).SendKeys(paypalEmail);
_driver.FindElement(By.Id("btnNext")).Click();
_driver.FindElement(By.Id("password")).SendKeys(paypalPassword);
_driver.FindElement(By.Id("btnLogin")).Click();
//The problem is here!!!
var element = _driver.FindElement(By.Id("payment-submit-btn"));
Actions builder = new Actions(_driver);
builder.MoveToElement(element).Perform();

public string waitForWindow(int timeout)
{
    try
    {
        Thread.Sleep(timeout);
    }
    catch (Exception e)
    {
        Console.WriteLine("{0} Exception caught.", e);
    }
    var whNow = ((IReadOnlyCollection<object>)_driver.WindowHandles).ToList();
    var whThen = ((IReadOnlyCollection<object>)vars["WindowHandles"]).ToList();
    if (whNow.Count > whThen.Count)
    {
        return whNow.Except(whThen).First().ToString();
    }
    else
    {
        return whNow.First().ToString();
    }
}

支付页面截图

PayPal支付页面截图


解决建议

1. 检查并切换到正确的iframe

PayPal登录完成后,支付按钮大概率在新的iframe里,先切回主文档再定位目标iframe:

// 登录后先回到主页面
_driver.SwitchTo().DefaultContent();
// 定位包含支付按钮的iframe(根据实际页面调整选择器)
IWebElement paymentFrame = _driver.FindElement(By.CssSelector("iframe[src*='paypal.com/checkout']"));
_driver.SwitchTo().Frame(paymentFrame);

2. 用显式等待替代硬等待

Thread.Sleep稳定性差,改用显式等待确保元素加载完成:

WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(10));
// 等待按钮可点击
IWebElement submitBtn = wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("payment-submit-btn")));
submitBtn.Click();

3. 处理元素不可点击的情况

如果按钮存在但无法点击,试试以下两种方法:

  • 用JavaScript强制点击:
IJavaScriptExecutor js = (IJavaScriptExecutor)_driver;
js.ExecuteScript("arguments[0].click();", submitBtn);
  • 先滚动到按钮可见:
js.ExecuteScript("arguments[0].scrollIntoView(true);", submitBtn);

4. 提前处理Cookie

即使没看到Cookie弹窗,也可以提前注入必要的Cookie,避免页面状态异常:

// 示例:添加PayPal必要Cookie(需根据实际Cookie名调整)
Cookie paypalCookie = new Cookie("cookie_name", "cookie_value", ".paypal.com", "/", DateTime.Now.AddDays(1));
_driver.Manage().Cookies.AddCookie(paypalCookie);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:20:33