2016-05-18 142 views
0

我使用硒庫和python瀏覽器。python-硒 - 點擊產生的鏈接

我需要點擊從URL的鏈接:

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> 

但我只能看到它時,我選擇「考察對象」,因爲如果我選擇「查看源代碼」(後我粘貼URL和視頻和鏈接出現),沒有任何內容。

我試着用:

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

但我得到了一個錯誤:

NoSuchElementException: Message: no such element

,並與:

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

錯誤:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"name","selector":"dl_link"}

也有:

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

,並得到:

ElementNotVisibleException: Message: element not visible

所以,我的問題是:

  1. 爲什麼我不能看到HTML腳本下載鏈接時,我 按查看源代碼?
  2. 是否可以用 python完成進程(下載mp3文件)?
  3. 確實是網頁上有Java腳本的事實與問題有關嗎?
  4. 有沒有其他庫可以做到這一點?

謝謝。

+0

更改爲此'browser.find_element_by_name(「dl_link」)。click()'應該理想地工作 – nullpointer

+0

@nullpointer,我已經嘗試過,並且沒有錯誤消息是:消息:沒有這樣的元素:無法找到元素:{「method」:「name」,「selector」:「dl_link」} – GabyLP

回答

1

爲什麼這些元素出現在檢查功能中而不是源代碼中?

HTML元素可以通過某種腳本(例如Javascript,VBScript,...)自動生成,也可以從AJAX接收。源代碼包含文本格式的響應,意味着沒有腳本有機會運行。你的瀏覽器的檢測功能,在另一方面,顯示當前狀態

什麼,你可以做些什麼來縮小問題的範圍:

  1. 訪問該頁面在瀏覽器中,並關閉的JavaScript。如果元素現在不存在,則可以安全地假定JavaScript插入有問題的元素。

  2. 如果上述文字恰好如此,請重新打開javascript並打開開發人員工具中的網絡選項卡。重新加載頁面並觀察請求的資源。檢查是否可以在那裏找到任何AJAX/API請求。如果是這樣,請檢查它們是如何製作的並嘗試複製它們。

  3. 如果您找不到任何AJAX/API調用,則元素的生成方式會有所不同。檢查腳本文件的源代碼(html標籤)並查看裏面的代碼以獲取更多信息。

我不知道,可以幫助你在這裏的庫(雖然有可能是一個或兩個,我不代碼Python的那麼多),但它絕對有可能獲取內容,您需要(可能是有點棘手,取決於網站所有者的嘗試