javascript - 使用 PhantomJS 更改 userAgent 并不能解决旧网站问题

标签 javascript phantomjs

我在使用 PhantomJS 时遇到问题,该问题所渲染的图像显然是当前网站的旧版本。这是谷歌快讯。我需要修改“Deliver to”选项并设置为“RSS”,但在PhantomJS看来,网站没有这个选项。

Image of Google Alerts rendered by 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 中以隐身模式打开页面:

enter image description here

因此,为了使其在 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/

相关文章:

javascript - 如何在每次点击时更改 datetimepicker 的 z-index?

javascript - jQuery/Javascript 将焦点传递给下一个元素,同时在页面中使用 tab 键

javascript - map.js 在 4.2.4 版本 (mapNavigation) 中无法与 highstock 一起使用

continuous-integration - GitLab CI 无法安装/使用 PhantomJS

phantomjs - 如何在 CasperJS 中 POST 请求后获取响应

azure - Azure Web 作业上的 PhantomJs Webdriver 问题异常 - 无法在 http ://localhost:51293/上启动驱动程序服务

javascript - Angular 1.2 可以工作,但 1.4 不行

php - 表单提交后调用 onclick javascript 事件

python - 如何正确停止 phantomjs 执行

javascript - 用于从许多具有 "for"循环的 url 获取 html 信息的 x 射线使 objs 未定义