css - 带有多个引号的 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
# create driver object and launch the webpage
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20)
driver.get("https://myibd.investors.com/secure/signin.aspx?eurl=https://marketsmith.investors.com/")
# switch to the iframe we need
driver.switch_to.frame(driver.find_element_by_css_selector("iframe[id = 'signin-iframe']"))
# create variable for the login field
login_field = driver.find_element_by_css_selector("input[name='username'][data-gigya-placeholder='Email']")
# variable for password field
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
两次无效的新尝试:
1.) 我尝试使用反斜杠\
来转义值内的引号,如下所示。
password_field = driver.find_element_by_css_selector("input[gigya-expression:data-gigya-placeholder='\"screenset.translations[\'PASSWORD_132128826476804690_PLACEHOLDER\']\"]")
2.) 我将@Laif 的想法更进一步,发现这篇文章是关于使用转义字符用于单引号和双引号,'
以及"
各自的。
password_field = driver.find_element_by_css_selector("input[gigya-expression:data-gigya-placeholder='"screenset.translations['PASSWORD_132128826476804690_PLACEHOLDER']"']")
使用 XPath编辑 2
解决方法
我还没有弄清楚如何处理 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")
解决方案
如果引用给您带来麻烦,请记住您可以转义任何内联字符\
例如,如果我要分配str="\"\"\"\""
,print(str)
会打印出来""""
。
'
这两个也是有效的字符串,因为"
gigya-expression:data-gigya-placeholder="screenset.translations['PASSWORD_132128826476804690_PLACEHOLDER']"
gigya-expression:aria-label="screenset.translations['PASSWORD_132128826476804690_PLACEHOLDER']"
推荐阅读
- android - 为什么通过 SAF 将图像保存到可移动存储时 MediaStore 未更新?
- python - 如何将聚合函数应用于 Pandas 中数据透视表的所有列
- excel - 多页 eBay 店面网页抓取 [vba]
- groovy - Groovy 脚本:如何定义具有两个不同变量的范围
- python - 通过正则表达式过滤器过滤 Google BigQuery 列
- c - 无法找到 xv6 函数获取的源代码
- cvlib - cvlib detect_common_objects 不工作
- excel - Excel 数字格式默认为时间
- javascript - location.replace() 不会替换页面
- go - 如何从父目录运行兄弟 Go 应用程序(模块)