python+win32+ie浏览器操作

来源:互联网 发布:浩方提示网络传输错误 编辑:程序博客网 时间:2024/05/17 23:52

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

主要代码可以参考链接:

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

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

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


可以看到这样一段


我也是醉了,使用其中的方法我找到了COM对象的py文件,经过不断阅读这些py文件我发现:Document应该有这个函数,而且用法也对,只不过照那种方式不是对应的对象,使用Document的body就行,代码如下:

# -*- coding:UTF-8 -*-import win32com.clientfrom time import sleepsecond=win32com.client.DispatchEx("InternetExplorer.Application")second.Navigate('http://passport.cnblogs.com/login.aspx')second.Visible=1while second.Busy:    sleep(1)doc=second.Documentbody=doc.bodydoc.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就不说了,还是要自己多试试

0 0
原创粉丝点击