gpt4 book ai didi

java - getText() 获取任何标签之外的元素,而不在 xpath 中使用 text()

转载 作者:行者123 更新时间:2023-12-02 10:02:19 24 4
gpt4 key购买 nike

因此,我需要在网页中获取特定文本,该文本在标签外部或跨度标签之后包含 200 多行文本。

我能够获得准确的 xpath,

By outputVersion = By.xpath("//*[@class='output']/text()[contains(.,'TEXT THAT I NEED')]");
By outputVersion = By.xpath("//*[@class='timestamp']/following-sibling::text()[contains(.,'TEXT THAT I NEED')]");

虽然有text()在我想出并使用它的 xpath 上,我有 org.openqa.selenium.InvalidSelectorException每当我使用 getText()、getAttribute("value") 和 getAttribute("innerText") 时。

实际的页面元素如下所示

<pre class="output">
<span class="timestamp">time</span>
"TEXT"

<span class="timestamp">time</span>
"TEXT"
.
.
.
.
.
<span class="timestamp">time</span>
"TEXT THAT I NEED"
.
.
.
.
.
</pre>

有了这个,我需要想出一个不包括 text() 的 xpath。

请注意<span class="timestamp">time</span>超过 200 行不同的文本,并且会不时发生变化。另外,我需要的文本不在固定行位置,因此我依赖于 contains

最佳答案

这是仅获取父文本的方法。

Java 实现:

public String get_text_from_parent_by_postion(WebDriver driver, WebElement element, int textPosition) {
JavascriptExecutor js = (JavascriptExecutor) driver;
return (String) js.executeScript("var parent = arguments[0];var textPosition = arguments[1]; var txtPosition = 0; var child = parent.firstChild; var textValue=''; while(child) { if (child.nodeType === 3){ if (txtPosition===(textPosition-1)){ textValue = child.textContent; break;}}else{txtPosition+=1;}child = child.nextSibling; } return textValue;", element, textPosition);
}

这是在您的情况下如何调用此方法 -

WebElement element = driver.findElement(By.xpath("//p[@class='output']"));
get_text_from_parent_by_postion(driver, element,3)

Python实现:

        def get_text_from_parent_by_postion(element, textPosition=1):
return driver.execute_script(
""" var parent = arguments[0];
var textPosition = arguments[1];
var txtPosition = 0;
var child = parent.firstChild;
var textValue="";
while(child) {
if (child.nodeType === 3){
if (txtPosition===(textPosition-1)){
textValue = child.textContent;
break;
}}else{txtPosition+=1;}
child = child.nextSibling;
}
return textValue;""",
element, textPosition).strip()

关于java - getText() 获取任何标签之外的元素,而不在 xpath 中使用 text(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com