使用Selenium登录Sharepoint遇AttributeError:'function'对象无'accept'属性
看起来你卡在SharePoint自动化登录的证书弹窗这儿了,我来帮你拆解问题并给出可行的解决方案:
首先,你遇到的AttributeError: 'function' object has no attribute 'accept'是因为调用方式错误——driver.switch_to_alert是一个方法(函数),需要先调用它(加上括号)才能获取Alert对象,再调用accept()。但更关键的是:证书选择窗口属于系统级弹窗,不是网页原生的Alert,所以Selenium的常规Alert处理方法根本管不了它,这也是为什么你的代码一直没效果的核心原因。
下面给你几个实用的解决思路:
方案1:预先配置浏览器自动选择证书(最推荐)
如果是长期自动化场景,让浏览器记住证书选择是最省心的方式。以Chrome为例:
- 手动打开Chrome,访问你的SharePoint登录页面,当证书弹窗出现时,选中你需要使用的证书,勾选「始终允许使用此证书」选项,然后关闭浏览器。
- 你的Selenium脚本使用Chrome的用户配置文件启动,这样浏览器会自动加载之前保存的证书偏好,不用再手动选证书。
代码示例:
from selenium import webdriver options = webdriver.ChromeOptions() # 替换成你自己的Chrome用户配置文件路径,Windows一般是这个格式: options.add_argument(r"user-data-dir=C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data\Default") driver = webdriver.Chrome(options=options) # 之后直接访问SharePoint地址,浏览器会自动处理证书环节 driver.get("你的SharePoint文件夹地址")
方案2:用AutoIt模拟系统弹窗操作
如果没法预先配置浏览器,可以借助AutoIt这类工具来模拟点击证书弹窗的确认按钮:
- 下载安装AutoIt,打开「AutoIt Window Info」工具,获取证书弹窗的标题和确认按钮的控件信息(比如按钮的ClassnameNN)。
- 编写AutoIt脚本(保存为
select_cert.au3):
WinWaitActive("证书选择") ; 替换成你的证书弹窗实际标题 ControlClick("证书选择", "", "Button1") ; 替换成你获取到的确认按钮控件标识
- 把脚本编译成exe文件,在Selenium点击证书按钮后调用这个exe:
import os from selenium import webdriver driver = webdriver.Chrome() driver.get("你的SharePoint登录页") # 完成用户名输入等前置操作后,点击证书认证按钮 driver.find_element_by_id("certauth").click() # 调用编译好的AutoIt程序 os.startfile("C:\\你的路径\\select_cert.exe")
顺便纠正你代码里的两个问题
- 旧版本Selenium中,
switch_to_alert的正确调用方式是driver.switch_to_alert().accept()(必须加括号),但这个只对网页原生Alert有效,对系统证书弹窗没用。新版本Selenium更推荐用driver.switch_to.alert.accept()。 - 你尝试定位script标签并发送回车的操作完全无效,script标签不是可交互元素,根本接收不了键盘输入,这个思路可以放弃。
内容的提问来源于stack exchange,提问作者Otto
相关产品推荐
相关产品推荐

