2016-04-25 4 views
-1

Firefox webdriverを使ってzbigz.comのダウンロードプロセスを自動化するために、Seleniumを使ってPython3.5でプログラムを作成しようとしています。セレンのpythonの次のページにある要素にアクセスする

import time 
from selenium import webdriver 
from selenium.common.exceptions import TimeoutException 

#magnet link for the purpose of testing 
mag = "magnet:?xt=urn:btih:86259d1c8d9dfbe15b6290268231e68d414fed23&dn=The.Big.Bang.Theory.S09E21.HDTV.x264-LOL%5Bettv%5D&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Fexodus.desync.com%3A6969" 

def startdriver(): 
    #starting firefox driver and waiting for 100 seconds 
    driver = webdriver.Firefox() 
    driver.implicitly_wait(100) 
    return driver 

def download(driver, url, mg): 
    #opening up firefox at url = www.zbigz.com 
    driver.get(url) 

    try: 
     #accessing the required elements on the first page that opens up 
     entry_box = driver.find_element_by_xpath('.//*[@id=\'text-link-input\']') 
     go_button = driver.find_element_by_id('go-btn') 

     #entering magnet link 
     entry_box.clear() 
     entry_box.send_keys(mg) 
     #clicking on the 'Go' button 
     go_button.click() 

     #accessing the free option 
     free_button = driver.find_element_by_id('cloud-free-btn') 
     #clicking on the free option 
     free_button.click() 

     #now comes the next page ('www.zbigz.com/myfiles') where everything goes wrong 
     while driver.find_elements_by_tag_name('html') is None: #waiting for the page to load 
      continue 

     #this button is what I need to click 
     cloud_btn = driver.find_elements_by_xpath('.//*[@id=\'86259d1c8d9dfbe15b6290268231e68d414fed23\']/div[1]') 
     #allowing some time so that the download gets cached fully 
     time.sleep(60) 
     #clicking 
     cloud_btn.click() 

    except TimeoutException: 
     print('Page could not be loaded. Get a better connection!') 

if __name__=='__main__': 
    #starting driver and downloading 
    d = startdriver() 
    download(d, zbigz, mag) 
    time.sleep(30) 
    d.quit() 

は、しかし、私は、次のページ上のボタンにアクセスすることはできません。次のように私のコードです。私はこのコードを実行すると、これは私が得るエラーです:

Traceback (most recent call last): File "G:/Python/PyCharm Projects/TorrentDownloader.py", line 88, in download(d, zbigz, mag) File "G:/Python/PyCharm Projects/TorrentDownloader.py", line 80, in download cloud_btn.click() AttributeError: 'list' object has no attribute 'click'

私は次のページで要素にアクセスすることはできません。投稿方法はPOSTなのでdriver.get(zbigz+'myfiles')は使えません。

次のページの要素にアクセスする方法を提案してください。

答えて

0

WebDriver.find_elements_by_xpathは要素のリストを返します。あなたは一つだけの要素が必要な場合は、代わりに(なしsWebDriver.find_element_by_xpathを使用します。

cloud_btn = driver.find_element_by_xpath(".//*[@id='86259d1c8d9dfbe15b6290268231e68d414fed23']/div[1]") 

をところで、リテラル".."文字列を使用して、あなたは'内部をエスケープする必要はありません。

関連する問題