2016-04-15 17 views
0

私は現在、「ダウンロードボタン」をクリックすることができません。私はcss_selectorを複数の異なる方法で使用しようとしましたが、私が何らかの理由で私にエラーを与えていることを(下記)確信しています。誰かが下のコードを見て、私がコードの何が間違っているのか理解できるようにしてください。ここでSelenium Python 3.4.3自動ダウンロード(ボタン)セクション

は、プログラムの全体のコードです:

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 
import time 

browser = webdriver.Firefox() 
browser.get('https://torrentz.eu/') 

searchElem = browser.find_element_by_id('thesearchbox') 
searchElem.send_keys('Limitless') 
searchButton = browser.find_element_by_id('thesearchbutton') 
searchButton.click() 


wait = WebDriverWait(browser, 6) 
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.results dl"))) 

link_num_1 = browser.find_element_by_css_selector('div.results dl dt a') 
link_num_1.click() 

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.download dl"))) 

link_num_2 = browser.find_elements_by_css_selector('div.download dl dt a') 
link_num_2[1].click() 

問題がある場所です:そのページがで開かれているので、それdiv.category-detail li aのルックスから

Site_link_trynum_1 = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.category-detail li a"))) 
#Site_link_trynum_1 = browser.find_element_by_css_selector("div.li a") 
Site_link_trynum_1.click() 
+0

正確に結果ページをクリックしたいのですか? @アンダーソン。 – Andersson

+0

そのページをクリックしたいのは、そのファイルのダウンロードにつながるリンクです。 –

答えて

1

が見つかりませんセレンは元のウィンドウ(torrents.eu)でそれを探していますが、新しいウィンドウです。 あなたは、送信URLを取得し、そのような現在のウィンドウで開くには、あなたがポップアップの多くを扱っていることから、それは良いかもしれないすべてけれども、switch_to_window() 方法を使用してウィンドウを切り替えることを試みることができ

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 
import time 

browser = webdriver.Firefox() 
browser.get('https://torrentz.eu/') 

searchElem = browser.find_element_by_id('thesearchbox') 
searchElem.send_keys('Limitless') 
searchButton = browser.find_element_by_id('thesearchbutton') 
searchButton.click() 


wait = WebDriverWait(browser, 6) 
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.results dl"))) 

link_num_1 = browser.find_element_by_css_selector('div.results dl dt a') 
link_num_1.click() 

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.download dl"))) 

link_num_2 = browser.find_elements_by_css_selector('div.download dl dt a') 
link = link_num_2[1].get_attribute("href") 
browser.get(link) 

Site_link_trynum_1 = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.category-detail li a.torrent"))) 
#Site_link_trynum_1 = browser.find_element_by_css_selector("div.li a") 
Site_link_trynum_1.click() 

サイトのリンクを取得することがあなたの目的であれば、Seleniumを一緒に避けて、一種のWebクローラを書くことは考えてみる価値があります。 Seleniumで前進するなら、Seleniumの上の抽象レイヤーであるSplinterを見てみると、テストを書くのが簡単になるでしょう。上記のテストは、Splinterを使用した場合と似ています。

from splinter import Browser 

def test_torrents(): 

    with Browser() as browser: 

     browser.visit('https://torrentz.eu/') 

     # Search for something 
     browser.find_by_id("thesearchbox").fill("Limitless") 

     # Hit the search button 
     searchButton = browser.find_by_id('thesearchbutton') 
     searchButton.click() 

     # Get the results and click the first 
     results = browser.find_by_css('div.results dl dt a') 
     results.first.click() 

     # Get the torrents and visit the second (first is sponsored link) 
     torrents = browser.find_by_css('div.download dl dt a') 
     browser.visit(torrents[1]["href"]) 

     # Get the file 
     torrent_file = browser.find_by_css("div.category-detail li a.torrent") 
     print torrent_file["href"] 
+0

こんにちは、枝の上のアドバイスをありがとうが、まず私はあなたのメソッドを試してみましたが、それは私に多くのエラーを与えています。 'link = link_num_2 [1] .get_attribute(" href ") browser.get(link)'が何をしているのか明確にしてください。 –

+0

'link_num_2'は、CSSセレクタ' div.download dl dt a'によって見つかったすべての要素を含みます。これらのすべての要素から、 'link_num_2 [0]'はスポンサー提供リンクなので、第2要素は 'link_num_2 [1]'で扱います。 2番目の要素である 'a'要素からは、' href="http://link-im-interesting-in"> 'のように属性hrefを取得します。 'link'は' http:// link-im-interesting-in'と等しくなります。 'browser.get(link)'は 'http:// link-im-interesting-in'にナビゲートするよう現在のウィンドウに指示します。 – sowa

+0

あなたの言っていることを見ていますが、今度はフィードバックがありません。つまり、エラーはありませんが、 'browser.get(link)'はリンク先にはないようです。 –

関連する問題