2

This phantomjs code below is give me the following error:

Assertion failed: (_consumed <= scratch_size), function _hb_coretext_shape, file src/hb-coretext.cc, line 764.
Abort trap: 6

I don't understand what I'm doing wrong.

var querystring = require('querystring')
var webpage = require('webpage')
var main = {}

/* global phantom, $, pass, user, url */

main.loginFormData = function (cb) {
  var page = webpage.create()
  page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36'
  page.open(url, function (status) {
    page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js', function () {
      var form = page.evaluate(function () {
        return {
          'formdata': $('form').serialize(),
          'url': window.location.protocol + '//' + window.location.hostname + $('form').attr('action')
        }
      })
      return cb(form)
    })
  })
}

main.loginLoginForm = function (data, cb) {
  var formdata = querystring.parse(data.formdata)
  formdata.login = user
  formdata.password = pass
  var payload = querystring.stringify(formdata)
  var page = webpage.create()
  page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36'
  page.open(data.url, 'post', payload, function (status) {
    return cb(status)
  })
}

main.loginFormData(function (data) {
  console.log(JSON.stringify(data, null, 2))
  main.loginLoginForm(data, function (data) {
    console.log(JSON.stringify(data, null, 2))
    phantom.exit()
  })
})

This seems to only occur when calling page.settings.userAgent.

I switched to using promises and the error still occurs.

var Promise = require('bluebird')
var querystring = require('querystring')
var webpage = require('webpage')
var main = {}

var page = webpage.create()
page.settings.userAgent = ua

/* global phantom, $, pass, user, url, ua */

main.loginFormData = function () {
  return new Promise(function (resolve, reject) {
    page.open(url, function (status) {
      if (status !== 'success') return reject(new Error(status))
      page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js', function () {
        var data = page.evaluate(function () {
          return {
            'formdata': $('form').serialize(),
            'url': window.location.protocol + '//' + window.location.hostname + $('form').attr('action')
          }
        })
        return resolve(data)
      })
    })
  })
}

main.loginLoginForm = function (data) {
  return new Promise(function (resolve, reject) {
    var formdata = querystring.parse(data.formdata)
    formdata.login = user
    formdata.password = pass
    var payload = querystring.stringify(formdata)
    page.open(data.url, 'post', payload, function (status) {
      if (status !== 'success') return reject(new Error(status))
      return resolve()
    })
  })
}

main.loginFormData(page)
  .then(function (data) {
    // console.log(JSON.stringify(data, null, 2))
    return main.loginLoginForm(page, data)
  })
  .then(function (data) {
    // console.log(JSON.stringify(data, null, 2))
    phantom.exit()
  })
  .catch(function () {
    phantom.exit()
  })

The user agent I'm using is this:

var ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'

Runs successfully when:

  • I don't specify page.settings.userAgent
  • When I specify a page.settings.userAgent as the default (Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.0.0 Safari/538.1)
  • When I specify my custom user agent and I only run the first main.loginFormData.

Runs unexpectedly when:

  • I use my custom user agent & run both functions.
ThomasReggi
  • 55,053
  • 85
  • 237
  • 424
  • Some pages deliver different content based on the user agent. Additionally, they may try to use advanced web features that are not implemented in PhantomJS. This depends on the site, but this is just [speculation](https://blog.stackexchange.com/2012/02/lets-play-the-guessing-game/). – Artjom B. Sep 02 '15 at 07:25

0 Answers0