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

SeleniumBase CDP模式下执行JavaScript脚本报"SyntaxError: Illegal return statement"错误的解决方法

SeleniumBase CDP模式下执行JavaScript脚本报"SyntaxError: Illegal return statement"错误的解决方法

这个问题我之前也碰到过,本质是JavaScript语法规则和SeleniumBase执行脚本的逻辑导致的,我来给你拆解清楚原因和解决办法:

问题根源

当你用sb.cdp.evaluate()或者sb.execute_script()执行代码时,这些JavaScript代码是在全局作用域中运行的。而JavaScript的语法规则里,return语句只能出现在函数体内,全局作用域下直接写return是非法的——你原来的脚本里,最后一行的return getSomeValue();就是暴露在全局作用域的,这才触发了SyntaxError: Illegal return statement错误。

两种可行的解决方法

方法1:用立即执行函数表达式(IIFE)包裹代码

把你的逻辑整个包在一个自执行的函数里,这样return语句就处于函数体内,符合语法要求:

script = """
(function() {
    function getSomeValue() {
        return '42';
    }
    return getSomeValue();
})();
"""

方法2:利用脚本最后一个表达式的返回值

cdp.evaluate()和execute_script()都会自动返回脚本中最后一个表达式的结果,所以你可以去掉全局的return,直接调用函数即可:

script = """
function getSomeValue() {
    return '42';
}
getSomeValue();
"""

如果逻辑更简单,还可以进一步简化成直接返回值:

script = "'42';  # evaluate会自动返回最后一个表达式的结果"

修改后的完整代码示例

from seleniumbase import SB

with SB(uc=True, locale_code="en", headless=True) as sb:

    link = "https://news.ycombinator.com"
    
    print(f"\nOpening {link}")

    sb.wait_for_ready_state_complete(timeout=120)

    sb.activate_cdp_mode(link)

    # 任选一种方法的script即可
    script = """
(function() {
    function getSomeValue() {
        return '42';
    }
    return getSomeValue();
})();
"""
    
    data = sb.cdp.evaluate(script)
    # data = sb.execute_script(script)  # 这行也可以正常运行

    print(data)  # 输出:42
    print("Finished!")

这样修改后,不管用sb.cdp.evaluate()还是sb.execute_script(),都能正常执行脚本并返回预期的42了。

备注:内容来源于stack exchange,提问作者sudoExclamationExclamation

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 08:39:28