Python Selenium搜索[对象文本]

qq24tv8q  于 2023-02-08  发布在  Python
关注(0)|答案(3)|浏览(155)

下面是我的 selenium 代码。

sourcesearch = driver.find_element_by_xpath('//*[@id=\"Table_Exame\"]/tbody/tr[1]/td/text()[1]')

结果是-
selenium 元素。常见。异常。无效选择器异常:消息:无效的选择器:xpath表达式"//* [@id ="Table_Exame" ]/tbody/tr [1 ]/td/text()[1]"的结果为:[object Text],应为元素。
有什么方法可以让我通过Selenium检索[对象文本]吗?任何帮助都将不胜感激。
由于网站没有为文本添加任何标签,因此除Xpath之外的任何内容都不可用。另外,由于它只是一个仅限会员的网站,因此无法包含网站地址。

iklwldmw

iklwldmw1#

我也遇到过类似的问题,在搜索时发现了这个问题。
对我来说,从

//*[@id='form_main_step3']/li[2]/div/label[2]/text()

//*[@id='form_main_step3']/li[2]/div/label[2]

解决了我的问题。
我还发现需要仔细检查正确的DOM元素。YMMV。

tvokkenx

tvokkenx2#

由于XPath表达式以text()[whatever]结尾,因此它解析为文本容器,而不是HTML元素(或列表)。
提示:浏览页面时,在Firefox控制台中使用$x(some_xpath_expression)尝试XPath表达式。
也许您应该编辑您的问题,添加周围的HTML摘录,并准确描述您所期望的内容。

xe55xuns

xe55xuns3#

这可以通过JavaScript中的document.evaluate()方法来解决。
纯JavaScript:
var element = document.evaluate("//*[local-name() = 'text'][@x='8']/text()", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;if (element) {return element.nodeValue;}
下面是一个Java的例子(我害怕在Python中给出这个例子,因为我可能会在不执行的情况下犯错误,而且代码来自Java中的工作项目):

String textObjectXpath = "\"//*[local-name() = 'text'][@x='8']/text()\"";
    String script = "var element = document.evaluate("
            + textObjectXpath
            + ", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;"
            + "if (element) {return element.nodeValue;}";
    String extractedText = (String) ((JavascriptExecutor)driver).executeScript(script);

如果您不关心元素没有文本的情况,那么可以省略if语句"if (element) {return element.nodeValue;}"。在这种情况下,您可能需要将该行替换为"return element.nodeValue;"

相关问题