一尘不染

Elemen元素不可见异常

python

我的任务是编写一个解析器以单击网站上的一个按钮,但我只能单击其中一个按钮而遇到问题。以下代码适用于除一个按钮之外的所有按钮。

这是html:http
//pastebin.com/6dLF5ru8

这是源html:http
//pastebin.com/XhsedGLb

python代码:

 driver = webdriver.Firefox()  
 ...
 el = driver.find_element_by_id("-spel-nba")
 actions.move_to_element(el)
 actions.sleep(.1)
 actions.click()
 actions.perform()

我收到此错误。

ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with

根据赛富尔,我刚刚尝试等待相同的元素不可见异常:

wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.XPATH, "//input[contains(@id,'spsel')][@value='nba']"))).click()

阅读 206

收藏
2021-01-20

共1个答案

一尘不染

如果你看一下页面的源代码,你会明白,几乎所有的SELECTDIV都是元素faked和从JavaScript创建的,这就是为什么webdriver的不能
查阅 它们。

但是,有一种解决方法,方法是使用ActionChains打开您的开发人员控制台,然后在所需元素上注入 人工 CLICK,实际上是
Label 触发了 NBA 数据加载…这是一个工作示例:

from selenium import webdriver
from selenium.webdriver.common import action_chains, keys
import time

driver = webdriver.Firefox()
driver.get('Your URL here...')
assert 'NBA' in driver.page_source
action = action_chains.ActionChains(driver)

# open up the developer console, mine on MAC, yours may be diff key combo
action.send_keys(keys.Keys.COMMAND+keys.Keys.ALT+'i')
action.perform()
time.sleep(3)
# this below ENTER is to rid of the above "i"
action.send_keys(keys.Keys.ENTER)
# inject the JavaScript...
action.send_keys("document.querySelectorAll('label.boxed')[1].click()"+keys.Keys.ENTER)
action.perform()

另外,要替换所有ActionChains命令,您可以execute_script像这样简单地运行:

driver.execute_script("document.querySelectorAll('label.boxed')[1].click()")

无论如何,至少您可以在我的本地文件上找到所需的地方…希望对您有所帮助!

在此处输入图片说明

2021-01-20