gpt4 book ai didi

python - selenium.common.exceptions.NoSuchElementException:消息:无法找到 element://pre/*[not(self::b)]

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:14 25 4
gpt4 key购买 nike

https://www.codechef.com/ACMIND17/problems/STDDEV/我试图使用 python 脚本获取以下问题的输入和输出,但出现以下错误

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //pre/*[not(self::b)]

您可以很容易地发现 pre 和 b 都存在于源代码中,并且 b 是 pre 的子级,而不是为什么这个错误我只是试图排除 b 标签

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get('https://www.codechef.com/ACMIND17/problems/STDDEV/')
str=driver.find_element_by_xpath("//pre/*[not(self::b)]").text;
print(str);

我今天才开始学习这一切,如果有些愚蠢的话,我很抱歉

最佳答案

不幸的是,selenium find_element 方法需要一个元素作为返回值,因此我们不能使用 //pre/text()[1] 作为输入或 //pre/text()[ 2] 用于输出。所以我们必须中继 JavaScript 才能获得所需的输出。

简单的方法是使用从元素中给定位置提取文本的方法。您可以在应用程序中使用此方法,因此更喜欢此方法。

注意:该方法中的textPosition只不过是文本节点索引。例如,在本例中,输入值是第一个文本节点,输出值是第二个文本节点。

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){
textValue = child.textContent;
break;
}}else{txtPosition+=1;}
child = child.nextSibling;
}
return textValue;""",
element, textPosition).strip()

如何在您的情况下调用它:

# print input
print(get_text_from_parent_by_postion(driver.find_element_by_tag_name("pre"),1))
#print output
print(get_text_from_parent_by_postion(driver.find_element_by_tag_name("pre"),2))

关于python - selenium.common.exceptions.NoSuchElementException:消息:无法找到 element://pre/*[not(self::b)],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56176763/

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