Python Selenium-Can';t按数据标题的属性定位元素
我正在尝试做的事情: 非常简单,使用Selenium通过day元素的属性选择日历中的特定日期 网页的结构: 日历表中存在一个月的天数,这也应该是相当标准的。日历表的快照: HTML源代码的快照: 什么起作用了: 我可以通过直接路径(XPath或CSS选择器)定位/选择特定的day元素。例如,如果我想选择第6天,我将只使用以下代码。两者都很好Python Selenium-Can';t按数据标题的属性定位元素,python,html,selenium,automation,css-selectors,Python,Html,Selenium,Automation,Css Selectors,我正在尝试做的事情: 非常简单,使用Selenium通过day元素的属性选择日历中的特定日期 网页的结构: 日历表中存在一个月的天数,这也应该是相当标准的。日历表的快照: HTML源代码的快照: 什么起作用了: 我可以通过直接路径(XPath或CSS选择器)定位/选择特定的day元素。例如,如果我想选择第6天,我将只使用以下代码。两者都很好 driver.find_element_by_xpath('//table/tbody/tr[2]/td[4]') driver.find_element
driver.find_element_by_xpath('//table/tbody/tr[2]/td[4]')
driver.find_element_by_css_selector('table > tbody > tr:nth-child(2) > td:nth-child(4)')
什么不起作用:我只想通过标识符选择一天。正如您在上面嵌入的源代码图片中所看到的,没有每天唯一的类或id名称。“数据标题”的属性似乎是一个完美的解决方案,因为它的值是当天在日历表中的位置。例如,第6天的数据标题为“r1c3”
因此,我尝试通过属性值再次选择元素。这就是我被困的地方。我被赋予无效语法的语法错误。代码如下:
driver.find_element_by_css_selector('table > tbody td[data-title='r1c3']')
箭头指向“r1c3”中的3,但我真的不知道这行代码出了什么问题
是因为“data title”属性的名称中有一个连字符,而Python/Selenium很难处理这个连字符吗?那么如何正确地转义连字符呢?许多相关文章使用带有连字符的名称的属性,而且似乎没有涉及任何问题或转义,这让人感到困惑
是因为表节点下有多个tr节点,一个tr节点下有多个td节点,而我的代码没有引导我找到我想要的特定td吗?但这不是属性规范的目的吗
请帮我解开这个谜。我会非常感激你的魔力。谢谢 如果这对您不起作用:
driver.find\u element\u by_css\u selector('table>tbody td[data title='r1c3'])
那么这应该是可行的:
driver.find_element_by_css_selector("table > tbody td[data-title='r1c3']")
这不是因为连字符。这是因为您使用了单引号,只需将外部单引号替换为双引号,重置似乎就可以了
是因为表节点下有多个tr节点,一个tr节点下有多个td节点,而我的代码没有引导我找到我想要的特定td吗?:不,这是一个无效的语法错误,因为python无法解析它。您使用的定位器非常好。
/table/tbody/tr\[2]/td[4]
反斜杠有效吗?嗨,约翰!很抱歉,当我第一次尝试在问题框中键入代码时,我添加了这一点。由于不知道代码可以单独格式化,我将代码作为普通文本行放入其中,其中的反斜杠用于转义“[2]”,因为它被定向到我上传的第二个图像…然后cruisepandey帮助我格式化它,反斜杠随后出现。我现在已经做了编辑。:)非常感谢您的回答和指出!这是我的第一个问题。:)啊,双引号起作用了!离胜利又近了一步。非常感谢你的回答,cruisepandey!这也是我关于stackoverflow的第一个问题,谢谢你帮我编辑代码@玄泽:没问题,你真的把你的问题解释得很好。我很感激。如果这对你有用,你介意接受这个答案吗?如果您想接受,只需单击“向下投票”按钮下方的复选标记。或者如果你想通过公认的答案,那么你可以按照:()@xuanzee:谢谢。祝您有个美好的一天。