我有一个问题,我的phantomjs加载一个网站太慢,总是至少60秒,但在google.com等其他网站上只需不到1秒。
PhantomJSDriverService service = PhantomJSDriverService.CreateDefaultService();
service.IgnoreSslErrors = true;
service.LoadImages = false;
service.ProxyType = "none";
service.HideCommandPromptWindow = true;
using (IWebDriver driver = new PhantomJSDriver(service ))
{
driver.Navigate().GoToUrl("http://abc.xyz"); //blocks too long
...
}
有没有办法强制它在达到某一点后完成加载,以便脚本继续?
答案 0 :(得分:2)
我现在看到你在问什么。您有一个很长的加载页面,您希望在相关的东西加载后停止。我遇到了一些与我们工作的网站相同的问题,但我没有尝试过程序化解决方案。对不起,我不知道幻影,但我发现了一些我觉得有用的链接。
我接近它的方法是等待DOMContentLoaded
事件触发,然后将ESC发送到页面。至少这是我手动停止长时间加载我不关心的文件,以便继续执行。
我发现了这个问题How can I wait for the page to be ready in PhantomJS?以下是相关部分:
var page = require('webpage').create();
var system = require('system');
page.onInitialized = function() {
page.onCallback = function(data) {
console.log('Main page is loaded and ready');
//Do whatever here
};
page.evaluate(function() {
document.addEventListener('DOMContentLoaded', function() {
window.callPhantom();
}, false);
console.log("Added listener to wait for page ready");
});
};
page.open('https://www.google.com', function(status) {});
检测到DOMContentLoaded
后,使用sendkeys()
发送ESC密钥。老实说,我不知道这是否会奏效,但这是我要开始的地方。希望它能让你开始。
答案 1 :(得分:0)
我刚刚发现了幻像加载速度太慢的原因,因为目标网络上有太多的扩展程序,广告......所以我切换到chrome并使用像Running Selenium WebDriver using Python with extensions (.crx files)这样的广告块