树莓派root用户运行Selenium+Chromium脚本白屏及元素找不到异常
树莓派Selenium脚本用户权限异常排查
问题说明
预期脚本行为:全屏打开Chromium浏览器并自动完成网站登录。
异常表现:pi用户运行正常,root用户运行时先显示data;空白页,随后跳转至隐私错误页,最终抛出找不到页面元素的异常。
测试代码
#!/home/pi/Documents/raspberry_screen_chrome_script/selenium/bin/python3 from selenium import webdriver from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager username_django = 'username' password_django = 'password' chrome_options = Options() chrome_options.add_argument('--no-sandbox') chrome_options.add_argument("--remote-debugging-port=9222"); chrome_options.add_experimental_option("useAutomationExtension", False) chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_argument("--start-fullscreen") chrome_options.add_argument("--kiosk") driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver', options=chrome_options) driver.get ("my_url") driver.find_element_by_id('id_username').send_keys(username_django) driver.find_element_by_id('password-input').send_keys(password_django) driver.find_element_by_id('submit-login').click()
环境依赖版本
selenium==3.141.0 webdriver-manager==3.4.2 Chromium 88.0.4324.187 Built on Raspbian , running on Raspbian 10 ChromeDriver 88.0.4324.187
异常堆栈信息
root@raspberrypi:/home/pi/Documents/raspberry_screen_chrome_script# ./interface_login_local.py Traceback (most recent call last): File "./interface_login_local.py", line 21, in <module> driver.find_element_by_id('id_username').send_keys(username_django) File "/home/pi/Documents/raspberry_screen_chrome_script/selenium/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 360, in find_element_by_id return self.find_element(by=By.ID, value=id_) File "/home/pi/Documents/raspberry_screen_chrome_script/selenium/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element 'value': value})['value'] File "/home/pi/Documents/raspberry_screen_chrome_script/selenium/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/home/pi/Documents/raspberry_screen_chrome_script/selenium/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id=\"id_username\"]"} (Session info: chrome=88.0.4324.187)
运行行为对比
- pi用户运行表现:

- root用户运行表现(右键点击时会出现白色块):

问题原因
root用户和pi用户的证书信任存储相互独立,你访问的目标站点使用了自签名/私有CA签发的HTTPS证书,pi用户已经信任该证书,root用户未信任,导致Chromium跳转到隐私错误页,页面没有渲染登录表单,自然找不到对应元素。
解决方案
方案一:添加启动参数跳过证书校验
在chrome_options配置段新增以下两行参数,直接忽略HTTPS证书错误:
chrome_options.add_argument('--ignore-certificate-errors') chrome_options.add_argument('--allow-running-insecure-content')
方案二:全局导入信任证书
如果需要保留证书校验逻辑,可将目标站点的证书导入系统全局信任存储:
- 将证书文件(.crt后缀)放入
/usr/local/share/ca-certificates/目录 - 执行命令
update-ca-certificates生效,所有用户都会信任该证书
可选优化:添加页面加载等待逻辑
避免网络波动导致页面未加载完成就查找元素报错,可添加显式等待:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 最多等待10秒,直到目标元素加载完成 WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'id_username'))) driver.find_element_by_id('id_username').send_keys(username_django)
内容的提问来源于stack exchange,提问作者Welyweloo
相关产品推荐
相关产品推荐

