【发布时间】:2019-02-12 07:45:20
【问题描述】:
我将 selenium 与 Python 一起用于浏览器自动化。 在这个特定的网页上,我需要为我上传的视频选择类别。显示的类别具有要单击的复选框,但实际上,它们不是复选框。用鼠标单击它们时,元素的类会发生变化。
之前-
<span class='foo', id='bar'>
之后-
<span class='foo.active', id='bar'>
我可以同时使用find_element_by_class_name 和find_element_by_id 来定位元素
问题不在于定位元素,而在于点击它们。
- 我试过
.click()方法,明显不行 - 我试过
ActionChains,它给出了一个错误
rect 未定义。
- 我尝试了
execute_script方法,它不会抛出任何错误,但也不会改变任何东西。
driver.execute_script("arguments[0].setAttribute('class','foo.active')", element)
还有其他方法可以检查该复选框吗?
更新:我意识到该元素不在视图中,因为它会引发错误
消息:元素无法滚动到视图中
另外,element.text 返回一个空字符串。
当我在浏览器中看到网页时,没有任何东西挡住视线。
代码如下:
<li id='categoryID1' class='categoryBtn list5'>
<span class="categoryCheckbox"></span>
<span class="categoryLabel">Funny</span>
<div class="reset"></div>
</li>
我试过了:
driver.find_element_by_xpath("//span[contains(text(),'Funny')]")
它会抛出这个错误:
selenium.common.exceptions.ElementNotInteractableException:消息:元素无法滚动到视图中
更新 2:我还意识到使用 contains(text()) 方法会返回一个不在视图中的元素。另一方面,当我从浏览器复制 XPath 然后使用它时,它返回一个可以单击的元素。
【问题讨论】:
-
你能分享一下你用的是什么定位器吗?
-
我尝试了 by_id 和 by_class
-
您提供的
span节点中没有id,请尝试共享整个html 行和您迄今为止尝试过的定位器 -
请通过 xpath 尝试(它永远是唯一的)。
-
为什么 .click() 不起作用?如果元素没有被其他层覆盖,它应该可以工作。
标签: python-3.x selenium selenium-webdriver automation