我正在尝试在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)
你可能会对此有所启发,但你需要在URL中包含该方案,即http.尝试改变
codecademy = 'www.codecademy.com'
Run Code Online (Sandbox Code Playgroud)
至
codecademy = 'http://www.codecademy.com'
Run Code Online (Sandbox Code Playgroud)