硒元素不可见异常

发布于 2021-01-29 14:55:39

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

这是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()
关注者
0
被浏览
103
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果你看一下页面的源代码,你会明白,几乎所有的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()")
    

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

    在此处输入图片说明



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看