python – 有趣的是“getElementById()只需要一个参数(2个给定)”,有时它会发生。有人可以解释一下吗?

#-*- coding:utf-8 -*-
import win32com.client, pythoncom
import time

ie = win32com.client.DispatchEx('InternetExplorer.Application.1')
ie.Visible = 1
ie.Navigate('http://ieeexplore.ieee.org/xpl/periodicals.jsp')
time.sleep( 5 )

ie.Document.getElementById("browse_keyword").value ="Computer"
ie.Document.getElementsByTagName("input")[24].click()
import win32com.client, pythoncom
import time

ie = win32com.client.DispatchEx('InternetExplorer.Application')
ie.Visible = 1
ie.Navigate('www.baidu.com')
time.sleep(5)

print 'browse_keword'
ie.Document.getElementById("kw").value ="Computer"
ie.Document.getElementById("su").click()
print 'Done!'

当运行第一个部分代码时,它将弹出:

ie.Document.getElementById("browse_keyword").value ="Computer"
TypeError: getElementById() takes exactly 1 argument (2 given)

第二部分代码运行正常。使结果不同的区别是什么?

两种情况的区别与您指定的COM名称无关:InternetExplorer.Application或InternetExplorer.Application.1导致完全相同的CLSID,它为您提供IWebBrowser2接口。运行时行为的差异完全归结于您检索到的URL。

这里的区别可能在于HTML页面,而另一个是XHTML;或者可能只是失败页面中的错误阻止了DOM初始化。无论哪个似乎是IE9解析器的“功能”。

请注意,如果您启用兼容性模式,则不会发生这种情况(在下面的第二行之后,我点击了地址栏中的兼容性模式图标):

(Pdb) ie.Document.DocumentMode
9.0
(Pdb) ie.Document.getElementById("browse_keyword").value
*** TypeError: getElementById() takes exactly 1 argument (2 given)
(Pdb) ie.Document.documentMode
7.0
(Pdb) ie.Document.getElementById("browse_keyword").value
u''

不幸的是,我不知道如何从脚本切换兼容性模式(documentMode属性不可设置)。也许别人呢?

我想,错误的参数计数来自COM:Python传入参数,COM对象使用误导性错误拒绝该调用。

http://stackoverflow.com/questions/9816967/interesting-getelementbyid-takes-exactly-1-argument-2-given-sometimes-it

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 有趣的是“getElementById()只需要一个参数(2个给定)”,有时它会发生。有人可以解释一下吗?