python+win32+ie浏览器操作

本来的打算是写一个脚本,能够自动登陆土豆账号,于是就百度标题,找到了一些做法,照葫芦画瓢死活不对。

主要代码可以参考链接:

https://www.baidu.com/link?url=9MujwNCZ47BW8lruNbVqTbjcxFszmP-AQxM_9j0M7Jav-k61z-N57WsfjyEcwL0EqCiux9i17TspbQk0w1bQ1K&wd=&eqid=bbae6242000047550000000457a1bab1

但是getElementById函数不知道为什么出问题,不传参出问题:

  File "", line 2, in getElementById
  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的帮助文档,也可以查到相关东西,比如:

python+win32+ie浏览器操作_第1张图片

可以看到这样一段

python+win32+ie浏览器操作_第2张图片

我也是醉了,使用其中的方法我找到了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'

具体各种bug就不说了,还是要自己多试试

你可能感兴趣的:(python)