我在使用 PhantomJS 时遇到问题,该问题所渲染的图像显然是当前网站的旧版本。这是谷歌快讯。我需要修改“Deliver to”选项并设置为“RSS”,但在PhantomJS看来,网站没有这个选项。
有人建议我修改userAgent
,但我尝试了很多方法,渲染的结果没有什么不同。
page.settings.userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
我的整个脚本。
'use strict'
var page = require('webpage').create(),
isLoaded,
controller,
isSubmitted = false
page.viewportSize = { width: 1920, height: 1080 }
page.settings.userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
page.open('https://www.google.com/alerts', function() {
isLoaded = true
})
page.onLoadStarted = function() {
log('Loading page...')
}
page.onLoadFinished = function(status) {
log('Page has loaded.')
if (status !== 'success') {
log('The page has failed to load.')
exit()
} else {
if (isSubmitted) {
log('Submitted!')
clear()
exit()
} else {
controller = setInterval(function() {
if (isLoaded) {
isLoaded = false
fillUpInputField('input', 'PhantomJS')
} else {
selectRSSOption()
}
}, 1500)
}
}
}
page.onError = function(msg, trace) {
log(msg)
trace.forEach(function(item) {
log(' ', item.file, ':', item.line)
})
}
// -------------------------------------------------------------------------------------------------
// Methods
// -------------------------------------------------------------------------------------------------
function exit() {
phantom.exit()
}
function log(str) {
console.log(str)
}
function render(name) {
page.render(name + '.png')
}
function fillUpInputField(selector, query) {
page.evaluate(function(selector) {
document.querySelector(selector).focus()
}, selector)
page.sendEvent('keypress', query)
render('fill_up_form.png')
log('Rendered fill_up_form.png')
}
function selectRSSOption() {
page.evaluate(function() {
document.querySelector('.show_options').click()
})
render('show_options.png')
log('Rendered show_options.png')
}
最佳答案
这种不一致背后的原因非常简单:在用户登录 Google 帐户之前,Google 快讯没有“传送”选项。
尝试在同一 Chrome 中以隐身模式打开页面:
因此,为了使其在 PhantomJS 中运行,您需要先登录 Google。使用 --cookies-file.txt
CLI 参数在脚本运行之间保留 cookie,这样您每月只需登录一次。
/path/to/phantomjs --cookies-file=cookies.txt /script/to/run.js
关于javascript - 使用 PhantomJS 更改 userAgent 并不能解决旧网站问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41952160/