我有一项任务,我必须将大约1,500个PDF文件上传到Drupal CMS。我不能一次上传所有内容,因为至少对于我们正在使用的Drupal构建,上传文件是一个抽出的过程,而不仅仅是一个页面形式。显然我想自动化这个。我一直在尝试编写一个脚本来完成这项任务。
使用Mechanize,我已成功登录CMS并导航到“节点”创建页面。但是,上传文件的过程需要单击按钮,这会打开一个嵌入式窗口,在其中单击另一个按钮打开目录窗口以选择文件,然后在返回原始页面之前有两个确认窗口提交表格。嵌入式窗口加载之间通常存在一些明显的滞后。
我有没有办法将任何Python Web测试库(如Splinter)与我已经创建的Mechanize会话合并?或者最好使用完全不同的库重写脚本?
Python脚本:
import mechanize
br = mechanize.Browser(factory = mechanize.RobustFactory())
cj = cookielib.LWPCookieJar()
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
def authenticate():
print 'Attepting to log in to CMS...'
br.open('url')
br.form = list(br.forms())[2]
br['name'] = 'name'
br['pass'] = 'pass'
br['usage-accept'] = ['1']
try:
br.submit()
print 'Success!'
except:
'Login failed. Is the VPN active?'
def downloadselection():
print 'Navigating to download page...'
br.open('next url')
print 'Success!'
def selectcategory():
print 'Selecting appropriate download category...'
br.form = list(br.forms())[0]
br['gid'] = ['286']
br.submit()
print 'Success!'
print 'Filling out forms...'
br.form = list(br.forms())[0]
br['title'] = 'test'
br['body[und][0][summary]'] = 'test'
br['body[und][0][value]'] = 'test'
print 'Success! Selecting file to upload...'
#print 'Success!'exit
if __name__ == '__main__':
authenticate()
downloadselection()
selectcategory()
处理上传按钮的页面上的HTML源代码如下:
</div><a class="button launcher" href="#">Select media</a>
然后嵌入窗口是带有<div id=media-browser-page>
元素的<input id="edit-upload">
。
抱歉,这是一堆杂乱的信息,但我很遗憾,我不知道如何将另一个库与Mechanize集成。
有人能指出我正确的方向吗?