我正在尝试使用Python 3和Selenium从页面中选择特定元素。
该页面包含一个长列表(数百个项目),这些列表的格式如下:
此表的html如下所示:
当我展开我试图点击的特定项目的元素时,它看起来像这样(链接因隐私而模糊):
到目前为止,我一直在做的是使用
搜索我需要的元素titleField = 'Zombie Apocalypse'
searchBuilder = "//*[contains(text(), '" + titleField + "')]"
searchForBook = browser.find_elements_by_xpath(searchBuilder)
searchForBook[0].click()
在某些时候有效。当有两个具有相同名称的项目,或者如果标题中有撇号时,我遇到了问题,有时我无法弄清楚为什么它根本不起作用。
是否有更好的方法从该表中选择单个元素而不是我使用的方式?我会提前提供该项目的标题,但不是ID号。身份证号码是我试图抓的信息。
如果搜索返回项目的URL,我也可以使用它,因为ID号包含在该URL中,所以我可以从那里拉出来。但标题不在URL中,所以我不知道如何搜索它。
答案 0 :(得分:0)
在将文本插入XPath表达式之前,应引用该文本。这将为xpath表达式适当地编码yoyr字符串。请注意," quoteattr" ed stings包括'
或"
。
from xml.sax.saxutils import quoteattr
titleField = quoteattr('Zombie Apocalypse') # But may contain XML markup chars
searchBuilder = "//*[contains(text(), " + titleField + ")]"
searchForBook = browser.find_elements_by_xpath(searchBuilder)
searchForBook[0].click()