如何在Selenium Python的browser.execute_script()中调用自定义JS登录函数
Selenium Python 执行自定义JS登录函数解决方案
核心实现逻辑
browser.execute_script() 支持将动态参数放在JS字符串之后传入,JS代码内可以通过arguments[下标]的方式获取对应参数,完全避免字符串拼接带来的引号冲突、特殊字符转义问题。
完整代码示例
from selenium import webdriver # 初始化浏览器实例,可替换为自己在用的Chrome/Firefox配置 browser = webdriver.Chrome() # 先打开目标站点,必须保证在对应域名下执行JS,localStorage写入才会生效 browser.get("你要登录的目标站点地址") # 替换为实际的业务token target_token = "你的实际token值" # 执行自定义JS browser.execute_script(""" function login(token) { setInterval(() => { document.body .appendChild(document.createElement `iframe`) .contentWindow.localStorage.token = `"${token}"` }, 50); setTimeout(() => { location.reload(); }, 2500); } // arguments[0] 对应execute_script传入的第二个参数target_token login(arguments[0]); """, target_token)
简化写法(无需单独封装函数)
如果不需要复用login函数,可以直接把逻辑写在JS代码块里,写法更简洁:
target_token = "你的实际token值" browser.execute_script(""" const token = arguments[0]; setInterval(() => { document.body .appendChild(document.createElement `iframe`) .contentWindow.localStorage.token = `"${token}"` }, 50); setTimeout(() => { location.reload(); }, 2500); """, target_token)
注意事项
- 执行JS前必须已经通过
browser.get()打开了目标站点的页面,否则localStorage会写入到空白页,无法生效 - 如果遇到token写入失败的情况,可以适当延长
setTimeout的等待时长,或添加页面加载完成判断后再执行JS
内容的提问来源于stack exchange,提问作者Jarvn
相关产品推荐
相关产品推荐

