Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
449 views
in Technique[技术] by (71.8m points)

javascript - How do I override window.screen?

I'm writing a simple PhantomJS app that scrapes particular pages looking for patterns. In one of these pages, the owner of the site is reading the window.screen width/height properties and changing the URL on me (which is cancelling the loading of the rest of the page). Setting the viewportSize changes the width/height values of the window, but not of the screen object.

Attempt 1

My first step was disabling navigation, like so:

tab.onLoadStarted = function () {
    tab.navigationLocked = true;
};

However, because this check is done in the <head>, it is causing the load event to fire, and sometimes the page hasn't fully loaded yet (which is causing lots of other issues).

Attempt 2

I tried overriding the screen object at the first load:

tab.onLoadStarted = function () {
    tab.evaluate(function () {
        window.screen = {
                width: 1920,
                height: 1080
            };
    });
};

However, that property is read-only, so setting it does nothing to change the value.

tl;dr

In PhantomJS, is there a way to override the window.screen value to set my own screen size?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can't set the window.screen values in the LoadStarted event, but you can in the Intialized event. So, instead, the code would look like this:

tab.onInitialized = function () {
    tab.evaluate(function () {
        window.screen = {
                width: 1920,
                height: 1080
            };
    });
};

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...