【发布时间】:2017-11-05 21:18:14
【问题描述】:
我有一个 TWebbrowser 组件和一些按钮在做一些事情。到目前为止效果很好,但是在一个过程中,我想单击网站上的一个按钮以显示其他信息,这些信息也应该被单击。
所以我有这个:
WebBrowser1.OleObject.Document.GetElementByID('linkDtlC0-0').Click();
WebBrowser1.OleObject.Document.GetElementByID('linkDtlC0-1').Click();
WebBrowser1.OleObject.Document.GetElementByID('linkDtlC0-2').Click();
然后我必须单击网站上的按钮以显示接下来要单击的三个元素。到目前为止没问题,但是在单击按钮后,网站需要几秒钟才能显示这三个元素。
我的问题: 当我尝试在清楚地单击 Button 后立即单击元素时,会导致错误提示没有(尚未)使用此名称单击的元素。当然我可以让我的程序等待几秒钟(更多)只是确定然后尝试点击,但我不想浪费时间所以我的问题是: 有没有办法检查 TWebbrowser 内的 Document 上是否存在元素(按名称)?
【问题讨论】:
-
处理
OnDocumentComplete事件并在那里检查pDisp = TWebBrowser(Sender).ControlInterface(这意味着文档“准备好”)。如果是这样,请开始遍历您的文档。要检查某个元素是否存在,您只需检查GetElementByID返回的引用是否为Assigned。 -
这也不起作用。也许你的答案是对的,但我遇到了 TWebbrowser 的一些可疑行为:我手动单击按钮并等待几秒钟,直到出现所需的元素。然后我使用
WebBrowser1.OleObject.Document.All.Item(i).ID);列出了所有 ID,前三个元素正常显示,但下一个(第四个)项目仍然没有列出,尽管我的常规浏览器(chrome 和 firefox)告诉我,第四个元素应该在那里。我的 TWebbrowser 似乎出于某种未知原因忽略了网站上的更改。 -
该网站有时会使用第一个数字“0”三次,但有时在增加第一个数字之前也会使用四到五次。这对我来说并不那么明显,因为当我用一些随机数据它总是在计数,因为我认为它每次都会这样做,但事实并非如此。很抱歉问这个问题,但我认为这是 TWebbrowser 组件的问题。 ——
-
我回滚了您的编辑。在这里编辑您的帖子并添加[已解决]和解决方案是不合适的。如果您愿意,您可以回答您自己的问题,但您必须正确回答,方法是在下面提供的空白处以答案的形式回答。请参阅Can I answer my own questions here? 了解更多信息。
-
您已经知道问题的答案 -
getElementById。它会告诉你给定的命名元素是否存在。这不是你真正的问题。您真正的问题是如何检测新对象何时可用。为此,我将启动一个短计时器(不是循环,除非您在其中调用Application.ProcessMessages,这是不可取的)并调用getElementById,直到它返回一个有效对象,然后继续。不要过早致电Click!使用异常处理程序来检测存在是错误的方法。
标签: delphi element twebbrowser