这个错误对python中的机械化意味着什么?

0 python bots mechanize

我正在尝试在python中制作一个机器人来运行codecademy课程并尽可能快地填写它们因为我们必须为高中课程完成它们并且我一直在使用python和mechanize来完成它.我已经填写了我认为是这个程序的基础知识,我必须填写的是具体的课程细节,但我一直在达到同样的错误

File "codecademy.py", line 11, in <module>
br.open(codecademy) #opens codecademy
File "build/bdist.macosx-10.10-intel/egg/mechanize/_mechanize.py", line 203, in open
File "build/bdist.macosx-10.10-intel/egg/mechanize/_mechanize.py", line 216, in _mech_open
mechanize._mechanize.BrowserStateError: can't fetch relative reference: not viewing any document
Run Code Online (Sandbox Code Playgroud)

我不确定这意味着什么.我检查了_mechanize.py第203和216行,但我没有看到任何错误,我不知道需要修复什么,因为没有很多关于mechanize的教程.这是我的代码:

try:
    import mechanize #tries to import mechanize
except ImportError: #if cant import mechanize
    print 'Oops. It seems as if you do not have mechanize installed'
codecademy = 'www.codecademy.com' #stores codecademy link as a variable
codecademySI = 'http://www.codecademy.com/sign_in' #codecademy sign in link
codecademyJS = 'http://www.codecademy.com/courses/getting-started-v2/0/1?curriculum_id=506324b3a7dffd00020bf661' #Javascript link

br = mechanize.Browser() #make a mechanize browser object, acts as virtual browser, emulator
br.open(codecademy) #opens codecademy

signing up
def signUp(username, password, email):
    br.select_form(nr=0) #selects first form on the page

    br["user[email]"] = email #sets value of email field to whatever user entered
    br["user[password]"] = password #sets value of username field to whatever user entered
    br["user[username]"] = username #sets value of password field to whatever user entered

    submittionResult = br.submit() #submits data entered above

def logIn(username, password):
    br.open(codecademySI) #opens codecademy

    br.select_form('sign-in-form')#finds login button
    br.form ['q'] = query
    br.submit()#clicks login button

    br["user[login]"] = username #sets value of email/username field to whatever user entered
    br["user[password]"] = password #sets value of password field to whatever user entered

    submittionResult = br.submit() #submits data entered above, local so doesn't override other Submittion Result

def _JS():
    br.open(codecamedyJS)
    #ace_text-input ui-inited
    js = 1
    if(js == 1):
        br["ace_text-input ui-inited"] = '"Name"'
        js =+ 1
    elif(js == 2):
        br["ace_text-input ui-inited"] = '"Name".length'
        js =+ 1
    elif(js == 3):
        br["ace_text-input ui-inited"] = '3 + 4'
        js =+ 1
    elif(js == 4):
        br["ace_text-input ui-inited"] = '4 * 4'
        js =+ 1
    elif(js == 5):
        br["ace_text-input ui-inited"] = 'eggplant'
        js =+ 1
    elif(js == 6):
        br["ace_text-input ui-inited"] = '"cake".length'
        js =+ 1
    elif(js == 7):
        br["ace_text-input ui-inited"] = 'confirm("This is an example of using JS to create some interaction on a website. Click OK to continue!");'
        js =+ 1
    elif(js == 8):
        br["ace_text-input ui-inited"] = 'confirm("I fell awesome!")'
        js =+ 1
    elif(js == 9):
        br["ace_text-input ui-inited"] = 'prompt("What is your name?");'
        js =+ 1
    elif(js == 10):
        br["ace_text-input ui-inited"] = '"string with words".length'
        js =+ 1
    elif(js == 11):
        br["ace_text-input ui-inited"] = '"Im coding like a champ".length'
        js =+ 1
    #browser.form = list(browser.forms())[0] #find form with no name
    br.select_form('ui-button ui-button--medium ui-button--blue--on-dark ui-loading js-submit-code')
    br.form ['q'] = query
    br.submit()
#signUp(russ999999, PASSWORD, russ9@optonline.net)
logIn(russ99999, PASSWORD)
Run Code Online (Sandbox Code Playgroud)

mha*_*wke 7

你可能会对此有所启发,但你需要在URL中包含该方案,即http.尝试改变

codecademy = 'www.codecademy.com'
Run Code Online (Sandbox Code Playgroud)

codecademy = 'http://www.codecademy.com'
Run Code Online (Sandbox Code Playgroud)