【发布时间】:2019-12-19 10:38:46
【问题描述】:
我在尝试在 python selenium 中执行脚本时遇到了困难...我正在尝试检查某个元素是否在指定的父级中,如果是,它应该返回 true。
这是我的代码:
for box in range(len(browser.find_elements(*selector))):
result = browser.execute_script("""
var nodesArray = Array.prototype.slice.call(document.querySelectorAll(".o-boxes__item"));
if(document.querySelector("div:nth-child({}) > div > div.m-package-box__body > div:nth-child(10) > div > label") === nodesArray[{}]){
false
}else{
nodesArray[{}].contains(document.querySelector("div:nth-child({}) > div > div.m-package-box__body > div:nth-child(10) > div > label"));
}""".format(box+1, box, box, box+1))
print(str(result))
当我运行它时,它会在控制台中给我这个输出:
nodesArray[{}].contains(document.querySelector("div:nth-child({}) > div > div.m-package-box__body > div:nth-child(10) > div > label"));
> }""".format(box+1, box, box, box+1))
E KeyError: '\n false\n '
tests/test_shopEshop.py:111: KeyError
我不知道我还能做什么...我尝试更改 execute_script 部分中的代码,尝试更改字符串格式(f 格式、.format 方法、硬编码参数)但没有任何效果,并且我开始放弃了……
【问题讨论】:
-
你在用python的时候为什么要在JS里做这么多?您应该能够仅使用 python 完成所有这些操作。如果您发布相关的 HTML(作为文本)会更好,这样我们就可以确定您的定位器是否正确/最佳,然后可能会确定更好的方法。
-
问题出在
box+1。在最后一个循环框+1 大于范围长度。 -
您可以先将变量
nodesArray替换为find_elements_by_xpath("//*[@class='o-boxes__item']")之类的东西。如果你能得到我们甚至只是一个 html 的复制粘贴,那会有所帮助。driver.page_source将返回整个页面。
标签: javascript python string selenium formatting