Spynner программный браузер Python для загрузки файлов с файлового сервера cgi: селектор jquery для browser.click ()? - PullRequest
1 голос
/ 11 июля 2011

Я пытаюсь использовать spynner, программный веб-браузер с отслеживанием состояния для загрузки файлов из хранилища файлов web / cgi, защищенных cookie.

Spynner использует jquery-подобные селекторы, чтобы сообщить браузеру, что нажимать.

У меня есть ссылка на файл

<a href="index.cgi?page=download&amp;file=%2Fhome%2Fjdataserver%2Fpublic_html%2Fuser_data%2Fcompany%2F.ftpquota" class="ar">

Однако, когда я говорю spynner нажать эту ссылку, ничего не скачивается. Мой код

import spynner
from spynner import browser
import pyquery
import private
import pynotify
import time


User_File_Area_URL="http://dataserver.com/cgi-bin/index.cgi"
agent = browser.Browser()
agent.load("http://dataserver.com/cgi-bin/index.cgi")
agent.wait(3)
agent.create_webview(True)
agent.show()
agent.fill("input[name=login]",private.uname)
agent.fill("input[name=password]",private.password)
agent.click("input[type=submit]")
#agent.wait(3)
#Pyquery Browser
d=pyquery.PyQuery(agent.html)
print str(d(".td1 .ar"))
agent.click(".td1 .ar",wait_load=True)
cookies = agent.get_cookies()
print cookies

Весь элемент приведен ниже. Я изменил имя сервера и другие атрибуты из соображений конфиденциальности.

<a href="index.cgi?dir=%2Fhome%2Fjdataserver%2Fpublic_html%2Fuser_data%2Fcompany%2FUntarred" class="ar"><img src="http://www.dataserver.com/img/efm_v1_6/folder.gif" width="16" height="16" border="0"/> Untarred</a><a href="index.cgi?page=download&amp;file=%2Fhome%2Fjdataserver%2Fpublic_html%2Fuser_data%2Fcompany%2F.ftpquota" class="ar"><img src="http://www.dataserver.com/img/efm_v1_6/download.gif" width="16" height="16" border="0" alt="Download" title="Download"/></a>

1 Ответ

1 голос
/ 13 июля 2011

Я получил это для работы с соответствующим селектором jquery, а также с помощью метода spynner.browser.download ().

Ссылки на файлы были вложены в теги изображений

Как только я использовал соответствующий тег для ссылки href, в которой находился файл, browser.click загрузил файл в каталог с именем www.servername.com.

Для всех файлов, заканчивающихся * .sca, например

browser.click ( 'а [HREF $ = "*. SCA"]')

Я также мог бы использовать browser.download (human_readable_url, open ("outfile.txt", "w")) для записи в указанный файл.

Код вставлен сюда

#!/usr/bin/python
import private
import spynner
from spynner import browser
import pyquery
import urlparse
import urllib

b = browser.Browser()
b.load("http://structures.com/cgi-bin/index.cgi")
#browser.debug_level = spynner.DEBUG

def fill_login_form():
    b.fill("input[name=login]",private.uname)
    b.fill("input[name=password]",private.password)
    b.click("input[type=submit]")

def click_download():
    pass

#b.create_webview(True)
b.fill("input[name=login]",private.uname)
b.fill("input[name=password]",private.password)
b.click("input[type=submit]")

b.wait_load()
d = pyquery.PyQuery(b.html)
print str(d('a[href$="ftpquota"]'))
# Test Downloading by clicking a link which will download file called .ftpquota
# Jquery pattern $= indicates a pattern that ends with "ftpquota"

#b.click('a[href$="ftpquota"]')

raw_href = d('a[href$="ftpquota"]').attr("href")
href = urllib.unquote(raw_href)
print "HREF" , raw_href
print "Unquted" , href
print "urlparse.urlsplit()", urlparse.urlsplit(href)
print  "Current URL", b.url
print "Synthesized url" , urlparse.urljoin(b.url, href) 
#d.make_links_absolute(base_url=b.url)
filename = raw_href.split("%2F")[-1]
b.download(href, open(filename, "w"))

загрузка сработала

...