ElementNotVisibleException:消息:尝试单击 YouTube 搜索中的顶部视频时出现元素不可交互错误

2023-12-23

我似乎无法找到一种方法来单击正确的元素以获得我正在寻找的网址。本质上我想点击topYouTube 搜索中的视频(排名最高的返回视频)。

如何解决 ElementNotInteractableException:元素在 Selenium webdriver 中不可见? https://stackoverflow.com/questions/43868009/how-to-resolve-elementnotinteractableexception-element-is-not-visible-in-seleni-> 这是针对 Java 的,但它让我找到了正确的方向(知道我需要执行 JavaScript)

http://www.teachmeselenium.com/2018/04/17/python-selenium-interacting-with-the-browser-executing-javascript-through-javascriptexecutor/ http://www.teachmeselenium.com/2018/04/17/python-selenium-interacting-with-the-browser-executing-javascript-through-javascriptexecutor/-> 这向我展示了应该如何尝试在 python 中执行 javascript。

我也看过无数关于等待的文章,但它们并不能解决我的问题。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

wrds = ["Vivaldi four seasons", "The Beatles twist and shout", "50 
cent heat"] #Random list of songs

driver = webdriver.Chrome()

for i in wrds:
    driver.get("http://www.youtube.com")
    elem = driver.find_element_by_id("search")
    elem.send_keys(i)
    elem.send_keys(Keys.RETURN)

    time.sleep(5)
    driver.execute_script("arguments[0].click()",driver.find_element_by_id('video-title')) #THIS CLICKS ON WRONG VIDEO
    #elem = driver.find_element_by_id("video-title").click() #THIS FAILS
    time.sleep(5)

    url = driver.current_url

driver.close()

I get a ElementNotVisibleException: Message: element not interactable当我不执行任何 javascript 时出现错误(尽管它实际上已经工作过,但它远非健壮)。当我执行 JavaScript 时,它点击了错误的视频。

我已经尝试了所有类型的等待“显式”和“隐式”,现在确实有效。 我很确定我需要执行一些 JavaScript,但我不知道如何执行。


你就快到了。你需要诱导WebDriver等待为了元素可点击您可以使用以下解决方案:

  • 代码块:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    wrds = ["Vivaldi four seasons", "The Beatles twist and shout", "50 cent heat"]
    kwrd = ["Vivaldi", "Beatles", "50"]
    options = webdriver.ChromeOptions()
    options.add_argument("start-maximized")
    options.add_argument("disable-infobars")
    options.add_argument("--disable-extensions")
    driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\\chromedriver.exe')
    for i, j in zip(wrds, kwrd):
        driver.get("https://www.youtube.com/")
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#search"))).send_keys(i)
        driver.find_element_by_css_selector("button.style-scope.ytd-searchbox#search-icon-legacy").click()
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "h3.title-and-badge.style-scope.ytd-video-renderer a"))).click()
        WebDriverWait(driver, 10).until(EC.title_contains(j))
        print(driver.current_url)
    driver.quit()
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ElementNotVisibleException:消息:尝试单击 YouTube 搜索中的顶部视频时出现元素不可交互错误 的相关文章

  • 带有空格的 Firestore 文档字段名称在 Python 中与 .where() 一起使用时会返回错误

    使用 Firebase 的 Cloud Firestore 在 Python 3 7 中编写一个非常简单的程序 在程序中 我使用 where 下拉集合的一部分 然后使用 for 循环对其进行迭代 当任何带有空格的字段名称被传递到 where
  • 更改QLineEdit的ClearButton图标

    我想在Windows 10 1909 64位 上的Python 3 8和PyQt5 5 15 0 上更改我的QLineEdit的ClearButton图标 稍后我想在Linux上运行代码 我尝试应用此处找到的代码 如何在 QLineEdit
  • Python 2 的 `exceptions` 模块在 Python3 中丢失了,它的内容到哪里去了?

    一位朋友提到 对于 Python 2 假设您在命令行上的路径环境变量中有它 pydoc exceptions 非常有用 知道它应该可以为他每周节省几分钟的网络查找时间 我自己每周都会用谷歌搜索一次例外层次结构 所以这对我来说也是一个有用的提
  • ModuleNotFoundError:没有名为“bs4”的模块

    当我尝试像这样导入 BeautifulSoup 时 from bs4 import BeautifulSoup 当我运行我的代码时 我收到此错误消息 ModuleNotFoundError No module named bs4 如果有人知
  • 哪个版本的 Miniconda 具有适用于 Windows 64 位的 Python 3.6?

    我正在开发一个需要这些深度学习库的项目 keras 和 tensorflow 不幸的是 这些不适用于 Python 3 7 有人可以告诉我一个带有 Python 3 6 的 Miniconda 版本 适用于 Windows 64 位 吗 我
  • 需要可见元素的 xpath 定位器

    我正在尝试对我的网站进行测试 在某些用户表单上遇到问题 诀窍是 表单中文本字段的数量根据用户选项的不同而变化 代码中存在禁用的文本字段 但样式为 displayed none gt 标签 所以我试图找到比逐一定位每个元素并用 try exc
  • 如何使用 PyCharm 运行 Pylint

    我想将 Pylint 配置为我正在处理的 Python 项目的整个项目目录中的外部工具 我尝试将存储库用作模块 init py没有的话 这两种方式都不起作用 我在设置 Pylint 与 PyCharm 一起运行时遇到困难 我知道我应该将它作
  • 生成二叉树的所有从根到叶的分支

    抱歉 如果这是一个常见问题 但我还没有找到适合我的特定问题的答案 我正在尝试实施一个walk方法将二叉树从根节点遍历到每个叶节点 每当到达叶节点时都会生成根到叶路径 例如 遍历表示为的二叉树 a b d c 会产生 a b c a d 我的
  • Selenium 2.0b3 IE WebDriver,点击不触发

    当使用 IE9 的 IE 驱动程序时 有时 Click 方法只会选择一个按钮 而不会执行 Click 的操作 请注意 这种情况只是偶尔发生 所以我不认为代码有问题 在Firefox4上使用Firefox驱动程序没有任何问题 我还遇到一个问题
  • 如何从下面的html中提取数据?

    我想要从中提取数据的 Html 是 div class infoMessageInner p span class ng binding Fiber r best lld till adressen Tj nsterna kan du be
  • 如何使用 xpath 检查某个对象在网页中是否可见?

    我正在 R 中使用 RSelenium 包来进行网络抓取 有时加载网页后 需要检查某个对象在网页中是否可见 例如 library RSelenium open a browser RSelenium startServer remDr lt
  • Selenium 与 scrapy 的动态页面

    我正在尝试使用 scrapy 从网页中抓取产品信息 我要抓取的网页如下所示 从包含 10 个产品的 Product list 页面开始 单击 下一步 按钮将加载接下来的 10 个产品 两个页面之间的 URL 不会改变 我使用 LinkExt
  • 带有 OAuth2 的 YouTube API v3:更新和删除失败并出现“权限不足”错误

    我在尝试着update and delete视频使用YouTube API v3 https developers google com youtube v3 docs videos with OAuth2 用于身份验证 https dev
  • 如何设置 Firefox 配置文件:Selenium RC、.Net 客户端驱动程序?

    我正在使用 Selenium RC Net 客户端驱动程序 我在 c selenium 目录中创建了一个 Firefox 配置文件 这是我的代码 Dim MySelenium As ISelenium Nothing MySelenium
  • 当变量取特定值时如何使 PyCharm 中断?

    我有一本大字典 其中一些元素偶尔会出现非法值 我想弄清楚非法值从何而来 PyCharm 应该不断监视我的字典的值 一旦它们中的任何一个取了非法值 它就应该中断并让我检查程序的状态 我知道我可以通过为我的字典创建一个 getter sette
  • 如何在 MacBook Pro 上的 Docker 容器内运行 tkinter?

    我正在尝试运行一个使用以下命令的 python GUI 应用程序tkinter我的 MacBook Pro 上的 docker 容器内的模块 所以我安装了XQuartz https www xquartz org 并跟随本教程 https
  • Python Selenium 找不到网页上的任何元素

    我想用硒自动执行一个简单的任务 登录本网站 https www lernsax de https www lernsax de 我试图通过 xpath 找到该元素 但这根本不起作用 我得到了NoSuchElementException 我正
  • Python:返回 // 正则表达式之间的字符串[重复]

    这个问题在这里已经有答案了 我仍然不明白正则表达式 我阅读了文档 但是在我想出了正则表达式字符之后 那么如何使用它们呢 例如 我只想返回前两个斜杠之间的任何内容 en lemon peel n ca llimona n is 的输出应该是
  • 在请求中设置端口

    我正在尝试利用cgminer使用 Python 的 API 我对利用requests图书馆 我了解如何做基本的事情requests but cgminer想要更具体一点 我想缩小 import socket import json sock
  • 如何使用 enumerate 来倒数?

    letters a b c 假设这是我的清单 在哪里for i letter in enumerate letters 将会 0 a 1 b 2 c 我怎样才能让它向后枚举 如 2 a 1 b 0 c 这是一个很好的解决方案并且工作完美 i

随机推荐