Selenium CSS选择器多引号处理及密码字段定位问题咨询
Selenium定位带嵌套引号属性的密码字段问题
使用Selenium定位密码字段时,无法找到可唯一标识该元素的特征。目前有两个属性可尝试用于定位,但属性值内存在多层嵌套引号,常规单双引号混用的方式仅能处理两层引号场景,三层及以上引号嵌套暂无可行处理思路。同时需要确认该需求是否无法通过CSS选择器实现,是否需要改用基于后代/子节点的类路径定位方案。
测试站点地址:https://myibd.investors.com/secure/signin.aspx?eurl=https://marketsmith.investors.com/
现有代码
import os from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 创建driver对象并打开目标页面 driver = webdriver.Chrome() wait = WebDriverWait(driver, 20) driver.get("https://myibd.investors.com/secure/signin.aspx?eurl=https://marketsmith.investors.com/") # 切换到目标iframe driver.switch_to.frame(driver.find_element_by_css_selector("iframe[id = 'signin-iframe']")) # 定位账号输入框 login_field = driver.find_element_by_css_selector("input[name='username'][data-gigya-placeholder='Email']") # 待实现:密码输入框定位 pswd_field = driver.find_element_by_css_selector()
待尝试的定位属性值
gigya-expression:data-gigya-placeholder="screenset.translations['PASSWORD_132128826476804690_PLACEHOLDER']" gigya-expression:aria-label="screenset.translations['PASSWORD_132128826476804690_PLACEHOLDER']"
已验证无效的解决方案
- 方案1:使用反斜杠
\转义属性值内部引号,代码如下:
password_field = driver.find_element_by_css_selector("input[gigya-expression:data-gigya-placeholder='\"screenset.translations[\'PASSWORD_132128826476804690_PLACEHOLDER\']\"']")
- 方案2:使用HTML转义字符
'(单引号)、"(双引号)替换对应符号,代码如下:
password_field = driver.find_element_by_css_selector("input[gigya-expression:data-gigya-placeholder='"screenset.translations['PASSWORD_132128826476804690_PLACEHOLDER']"']")
可行替代方案(XPath实现)
目前CSS选择器的引号冲突问题暂未解决,可通过XPath实现定位:在浏览器中打开目标元素的HTML源码,右键选择「复制」→「复制XPath」即可获取定位路径。
本次获取到的XPath路径://*[@id="gigya-login-form"]/div[2]/div[3]/div[2]/input
对应实现代码:
pswd_field = driver.find_element_by_xpath("//*[@id='gigya-login-form']/div[2]/div[3]/div[2]/input")
内容的提问来源于stack exchange,提问作者Matan
相关产品推荐
相关产品推荐

