我要做什么: 很简单,使用Selenium通过day元素的属性在日历中选择特定的一天。
网页的结构: 日历表中存在一个月的日期,这也应该是相当标准的。日历表的快照:dayTable HTML源代码的快照:dayTableHTML
有效的方法: 我通过XPath或CSS选择器通过直接路径定位/选择某天元素没有问题。例如,如果我要选择“ 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”。
因此,我尝试通过属性值再次选择元素。这就是我被困住的地方。我收到无效语法的SyntaxError。代码如下:
driver.find_element_by_css_selector('table > tbody td[data-title='r1c3']')
指向箭头指向'r1c3'中的3,但是我真的不知道这行代码有什么问题。
是因为'data-title'属性的名称中带有连字符,而Python / Selenium难以处理?那么如何正确转义连字符?令人困惑的是,许多相关文章使用带连字符的名称的属性,而且似乎没有任何问题或转义。
是因为表节点下有多个tr节点,而tr节点下有多个td节点,并且我的代码没有将我引向我想要的特定td?,但是不是吗?该属性规范是做什么用的?
请帮助解决这个谜。我将非常感谢您的魔力。谢谢!!
答案 0 :(得分:0)
如果这对您不起作用:driver.find_element_by_css_selector('table > tbody td[data-title='r1c3']')
然后这应该工作:
driver.find_element_by_css_selector("table > tbody td[data-title='r1c3']")
不是因为连字符。这是因为您使用了单引号,只需将外部单引号替换为双引号,重新设置就可以了。
是因为表节点下有多个tr节点,而tr节点下有多个td节点,并且我的代码没有将我引向我想要的特定td?:
不,这是无效的语法错误,因为 python 无法解析它。您使用过的定位器相当不错。