Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Selenium-Can';t按数据标题的属性定位元素_Python_Html_Selenium_Automation_Css Selectors - Fatal编程技术网

Python Selenium-Can';t按数据标题的属性定位元素

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

我正在尝试做的事情: 非常简单,使用Selenium通过day元素的属性选择日历中的特定日期

网页的结构: 日历表中存在一个月的天数,这也应该是相当标准的。日历表的快照: HTML源代码的快照:

什么起作用了: 我可以通过直接路径(XPath或CSS选择器)定位/选择特定的day元素。例如,如果我想选择第6天,我将只使用以下代码。两者都很好

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:谢谢。祝您有个美好的一天。