我正在使用WebView编写一个小型MacOS程序来加载网站。当您滚动到底部时,这是自动加载更多内容的网站之一。作为一个过期,我试图编写代码,不断滚动到页面的底部,以便加载更多的代码,等等。
到目前为止我所拥有的是:
scrollToBottomTotalTimes = 10
self.myWebView.mainFrame.load(NSURLRequest(url: NSURL(string: urlString)! as URL) as URLRequest!)
func webView(_ sender: WebView!, didFinishLoadFor frame: WebFrame!) {
var scrollToBottomCurrentTimes = 0
while scrollToBottomCurrentTimes != scrollToBottomTotalTimes {
scrollToBottomCurrentTimes += 1
self.myWebView.scrollToEndOfDocument(self)
sleep(2) //give the page some time to load
}
}
一次运行良好:页面加载,滚动到底部,以及更多页面加载。
然而,在此之后,尽管有足够的时间重新加载页面,但WebView不再滚动。页面上的位置与以前完全一样。
我觉得.scrollToEndOfDocument(self)
似乎没有发现网页变长的事实。
有没有办法更新' .scrollToEndOfDocument(self)
所以它知道页面的新底部在哪里?
谢谢!
答案 0 :(得分:0)
在我看来,你使用的是错误的方法。假设新内容到达,您可能会收到didFinishLoadFor
的多个请求。但是,您在方法内部执行循环,并在方法内部使用sleep,这会阻止主队列并禁用事件机制。
我建议您使用Grand Central Dispatch
(GCD
)设置计时器事件,然后从计时器事件中触发滚动事件。请注意,您必须在主队列中进行滚动,并且计时器事件不在主队列中。请查看GCD
上的文档。请参阅https://developer.apple.com/reference/dispatch。