【问题标题】:python- selenium- click on arising linkpython- selenium- 点击出现的链接
【发布时间】:2016-05-18 01:27:37
【问题描述】:

我正在为 python 和 chrome 浏览器使用 selenium 库。

我需要点击网址中的链接:

http://www.youtube-mp3.org/

这个想法是下载在以前的代码中转换为 mp3 文件的视频列表。 我的脚本是:

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

import time
url2='http://www.youtube-mp3.org/'

chromedriver = 'C:\\exp\\chromedriver.exe' #where you have the file
browser = webdriver.Chrome(chromedriver)
browser.get(url2)

direc = browser.find_element_by_id("youtube-url")
direc.clear()

direc.send_keys("https://www.youtube.com/watch?v=nYh-n7EOtMA") #an example url
browser.find_element_by_id("btns").click()

到这里一切正常。

现在我需要点击视频转换后出现的下载链接。

该部分的 html 是:

   <div id="dl_link" style="display: block;">
    <a href="/get?video_id=nYh-n7EOtMA&amp;h=-1&amp;r=-1.1" style="display:none"><b>Download</b></a>
    <a href="/get?video_id=nYh-n7EOtMA&amp;ts_create=1463533555&amp;r=MTg2LjYwLjE2MS4yMTE%3D&amp;h2=5ad90182ae65fea567f844c3b6a933aa&amp;s=145334"><b>Download</b></a><a href="/get?video_id=nYh-n7EOtMA&amp;h=-1&amp;r=-1.1" style="display:none">
  <b>Download</b>
 </a></div>

但是我只有在选择“检查对象”时才能看到,因为如果我选择“查看源代码”(在我粘贴了网址并出现视频和链接之后),里面什么都没有。强>

我试过了:

browser.find_element_by_partial_link_text("create").click()

但我得到了一个错误:

NoSuchElementException:消息:没有这样的元素

还有:

browser.find_element_by_name("dl_link").click()

错误:

NoSuchElementException:消息:没有这样的元素:无法定位 元素:{"method":"name","selector":"dl_link"}

还有:

browser.find_element_by_id("dl_link").click()

得到:

ElementNotVisibleException:消息:元素不可见

所以,我的问题是:

  1. 为什么我看不到下载链接的 html 脚本 按查看源代码?
  2. 是否可以通过以下方式完成该过程(下载 mp3 文件) 蟒蛇?
  3. 网页中包含 java 脚本这一事实与问题有关吗?
  4. 还有其他库可以做到这一点吗?

谢谢。

【问题讨论】:

  • 改成这个browser.find_element_by_name("dl_link").click() 会很理想。
  • @nullpointer,我之前已经尝试过了,但没有结果。错误消息是:消息:没有这样的元素:无法找到元素:{“方法”:“名称”,“选择器”:“dl_link”}

标签: javascript python google-chrome selenium youtube


【解决方案1】:

为什么元素出现在inspect函数中而不出现在源代码中?

HTML 元素可以由某种脚本(例如 Javascript、VBScript 等)自动生成,也可以从 AJAX 接收。源代码包含文本格式的响应,这意味着没有脚本有机会运行。另一方面,浏览器的检查功能显示当前状态

您可以做些什么来缩小问题范围:

  1. 在浏览器中访问页面并关闭 Javascript。如果这些元素现在不存在,您可以放心地假设 Javascript 插入了有问题的元素。

  2. 如果出现上述文本,请重新打开 javascript 并在开发人员工具中打开网络选项卡。重新加载页面并查看请求的资源。检查您是否可以在其中找到任何 AJAX/API 请求。如果是这样,请检查它们是如何制作的并尝试复制它们。

  3. 如果您找不到任何 AJAX/API 调用,则元素的生成方式不同。检查脚本文件的源代码( html 标签)并检查里面的代码以获取更多信息。

我不知道这里有什么库可以帮助你(虽然可能有一两个,但我不会编写太多 Python 代码),但绝对有可能获得你需要的内容(可能有点棘手,取决于网站所有者尝试了多少

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多