使用其他浏览器脚本库和Mechanize一起使用?

时间:2014-02-27 21:40:27

标签: python mechanize

我有一项任务,我必须将大约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集成。

有人能指出我正确的方向吗?

0 个答案:

没有答案