本来的打算是写一个脚本,能够自动登陆土豆账号,于是就百度标题,找到了一些做法,照葫芦画瓢死活不对。
主要代码可以参考链接:
https://www.baidu.com/link?url=9MujwNCZ47BW8lruNbVqTbjcxFszmP-AQxM_9j0M7Jav-k61z-N57WsfjyEcwL0EqCiux9i17TspbQk0w1bQ1K&wd=&eqid=bbae6242000047550000000457a1bab1
但是getElementById函数不知道为什么出问题,不传参出问题:
File "
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 287, in _ApplyTypes_
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
com_error: (-2147352319, 'OLE error 0x80020101', None, None)
传一个参数,又说传了两个,我也是醉了:
doc.getElementById("login")
TypeError: getElementById() takes exactly 1 argument (2 given)
如果有朋友能照上述网页做出来,请务必告诉我。我电脑win8,python 2.7.11,pywin32是对应版本,不知道会不会有影响。
于是死磕这个,问题还是要找到根源。python操作ie实际上是用了COM技术,具体细节我不清楚,大概和DLL相似,因此外面无法直接看到这个对象的用法以及成员等。
然后我接着查资料,发现pywin似乎提供了一些帮助工具,比如makepy,combrowse等,在site-package/win32com中可以找到,也集成到Pythonwin编辑器中了。
打开Pywin32的帮助文档,也可以查到相关东西,比如:
可以看到这样一段:
我也是醉了,使用其中的方法我找到了COM对象的py文件,经过不断阅读这些py文件我发现:Document应该有这个函数,而且用法也对,只不过照那种方式不是对应的对象,使用Document的body就行,代码如下:
# -*- coding:UTF-8 -*-
import win32com.client
from time import sleep
second=win32com.client.DispatchEx("InternetExplorer.Application")
second.Navigate('http://passport.cnblogs.com/login.aspx')
second.Visible=1
while second.Busy:
sleep(1)
doc=second.Document
body=doc.body
doc.getElementById("login")
for i in body.getElementsByTagName("input"):
if i.id=='input1':
i.value='13816407285'
if i.id=='input2':
i.value='59459540a'
for i in body.getElementsByTagName("input"):
if i.id=='signin':
i.click()
print 'click'