我需要在login.live.com上使用python和mechanize自动登录。 问题是,我找不到任何browser.forms(),但应该有一些,因为我检查了HTML代码:
我的代码:
import urllib2
import lxml
from mechanize import Browser
br=Browser()
#Simulate user
br.set_handle_robots( False )
br.addheaders = [('User-agent', 'GoogleChrome')]
#open site
url = "https://login.live.com/"
rep = br.open(url)
for frm in br.forms():
print frm
应该有一个名为' f1'在' login.live.com'。这部分是否可以动态生成?
的Nero
答案 0 :(得分:1)
https://login.live.com的回答是空洞的。一切都是通过javascript onload完成的。
要想见到你自己(至少在Mac和Linux上):
wget https://login.live.com/
或者在您的代码中:
import urllib2
from mechanize import Browser
br=Browser()
#Simulate user
br.set_handle_robots( False )
br.addheaders = [('User-agent', 'GoogleChrome')]
#open site
url = "https://login.live.com/"
rep = br.open(url)
print rep.read()
在没有执行javascript的情况下获取这些表单可能很难/不可能,但是为了这样做,我认为你将不得不离开python。编辑:或许你不必(见其他答案)。
如果您不需要实际分析网站响应并且只想做一些简单的事情,那么您可以提出请求而不必过多关注响应(您仍然拥有http状态代码,这可能足以看出您的请求成功)。
我猜也有实际的API。我不熟悉MS产品,也不知道你想要做什么,所以我不能指出任何特定的东西。
答案 1 :(得分:1)
正如sbarzowski指出你需要在网站上执行javascript。 但是你不需要为此留下python。事实上,你可以自动化Qt webkit。
示例(python3,在linux上测试):
#!/usr/bin/env python3
import sys
from urllib.request import urlopen
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
SHOWBROWSER = True
LOGIN = 'name@example.com'
PASS = 'foo'
class WebPage(QWebPage):
def __init__(self, parent=None):
super(WebPage, self).__init__(parent)
self.loadFinished.connect(self._loadFinished)
self.mainFrame().load(QUrl('http://login.live.com'))
def javaScriptConsoleMessage(self, msg, lineNumber, sourceID):
print("JsConsole(%s:%d): %s" % (sourceID, lineNumber, msg))
def _loadFinished(self, result):
frame = self.mainFrame()
url = frame.requestedUrl().toString()
print(url)
if url == 'http://login.live.com/':
frame.evaluateJavaScript(self.get_jquery())
frame.evaluateJavaScript(
'''
$('input[name="login"]').val('{login}')
$('input[name="passwd"]').val('{password}')
$('input[type="submit"]').click()
'''.format(login=LOGIN, password=PASS)
)
if 'auth/complete-signin' in url:
print('finished login')
if not SHOWBROWSER:
QApplication.quit()
def get_jquery(self):
response = urlopen('http://code.jquery.com/jquery-2.1.3.js')
return response.read().decode('utf-8')
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.view = QWebView(self)
self.view.setPage(WebPage())
layout = QVBoxLayout(self)
layout.setMargin(0)
layout.addWidget(self.view)
def headless():
app = QApplication(sys.argv)
view = QWebView()
view.setPage(WebPage())
app.exec_()
def main():
app = QApplication(sys.argv)
window = Window()
window.show()
app.exec_()
if __name__ == "__main__":
if SHOWBROWSER:
main()
else:
headless()