2015-11-12 66 views
2

因此,我使用splinter登录到站点,然后在登录后抓取cookie,然后将其保存为腌制对象以备后用。如何从先前保存的碎片实例中将碎片设置为碎片?

def save_cookie(username, password): 
    browser = Browser() 
    browser.visit("https://somesite.com") 

    browser.fill('username', username) 
    browser.fill('password', password) 

    login_button = browser.find_by_xpath('the_login_button_x_path') 

    login_button.click() 

    # make a file and save the pickled object. 
    file_Name = "the_cookie" 
    fileObject = open(file_Name,'wb') 
    pickle.dump(browser.cookies.all(verbose=True) ,fileObject) 
    fileObject.close() 
    # so file is saved. 

    # I take screen shot so that I know that the user is logged in. 
    browser.driver.save_screenshot('screenshot.png') 

所以我希望能够保存Cookie数据,这样我可以在浏览器中分裂出来的另一个实例以后再次使用它()。这将允许我登录一次,而不是每次我想测试需要登录状态的页面时登录。

def visit_site_as_logged_in_user(): 
    browser = Browser() 

    #open the previously pickled cookies object and load it 
    the_previously_saved_cookies = pickle.load(open("the_cookie", "rb")) 
    #set the cookies on this new browser instance 
    browser.cookies.add(the_previously_saved_cookies) 

    #visit the site 
    browser.visit("https://somesite.com") 

    # I take screen shot so that I know that the user is logged in. 
    browser.driver.save_screenshot('screenshot.png') 

因此,我希望用户访问该网站,并在登录状态,因为我从一审以完全相同的饼干,把它应用到一个新的实例。我可能误解了如何分裂处理cookie。文件不是很具描述性。 http://splinter.readthedocs.org/en/latest/cookies.html

当我看屏幕截图,用户只是访问该网站,而不是在登录状态。

回答

-1

我有类似的情况,对我来说,它是通过在添加cookie后添加内部网站来解决的。

def visit_site_as_logged_in_user(): 
    browser = Browser() 

    #open the previously pickled cookies object and load it 
    the_previously_saved_cookies = pickle.load(open("the_cookie", "rb")) 
    #set the cookies on this new browser instance 
    browser.visit("https://somesite.com") # see below 
    browser.cookies.add(the_previously_saved_cookies) 

    #visit the site 
    browser.visit("https://somesite.com/internal") 

    # I take screen shot so that I know that the user is logged in. 
    browser.driver.save_screenshot('screenshot.png') 

这工作对我来说,可能取决于网站,但与此设置,我没有再次填写登录表单。此外,我必须访问设置Cookie的基地,请参阅Unable to add a cookie using Selenium & Splinter