web-dev-qa-db-fra.com

Comment définir un proxy dans phantomjs

Cette https://www.npmjs.com/package/phantom#functionality-details page dit:

Vous pouvez également passer des commutateurs de ligne de commande au processus phantomjs en spécifiant des arguments supplémentaires pour phantom.create (), par exemple:

phantom.create '--load-images=no', '--local-to-remote-url-access=yes', (page) ->

ou en les spécifiant dans l'objet options *:

phantom.create {parameters: {'load-images': 'no', 'local-to-remote-url-access': 'yes'}}, (page) ->

Ces exemples ne sont que dans le script café et ils insinuent également que la fonction de création peut prendre

create('string',function)

ou

create([object object],function)

mais vraiment le premier paramètre attendu est la fonction!

Je voulais vraiment essayer http://phantomjs.org/api/command-line.html J'aurais peut-être une fausse idée, mais pour moi, il semblerait qu'ils puissent être utilisés dans la fonction de création (juste avant de faire la createPage), je me trompe?

J'ai essayé plusieurs choses, la plus logique est la suivante:

var phantom = require('phantom');
phantom.create(function(browser){
    browser.createPage(function(page){
        page.open('http://example.com/req.php', function() {

            });},{parameters:{'proxy':'98.239.198.83:21320'}});});

Alors la page est ouverte. Je le sais car je fais en sorte que req.php enregistre l'objet $ _SERVER dans un pavé tactile, mais les en-têtes REMOTE_ADDR et REMOTE_PORT ne sont pas ceux du proxy que j'ai défini. Ils n'ont aucun effet. J'ai aussi essayé:

{options:{'proxy':'98.239.198.83:21320'}}

Comme la documentation appelle cet objet l'objet options * * voir ci-dessus ^

et

'--proxy=98.239.198.83:21320'

J'ai également eu un Dig dans le module fantôme pour trouver la fonction de création. Ce n'est pas écrit en js, je ne peux pas le voir au moins. Il doit être en C++. Il semble que ce module ait été mis à jour, mais les exemples au fond du module ressemblent à du code ancien.

Comment puis-je faire cela?

MODIFIER:

var phantom = require('phantom');
phantom.create(function(browser){
    browser.createPage(function(page){

    browser.setProxy('98.239.198.83','21320','http', null, null, function(){

    page.open(
        'http://example.com/req.php', function() {

         });});});});

Cela ne produit aucune erreur et la page est supprimée, mais le proxy est ignoré.

12
Ben Muircroft
{ parameters: { 'proxy': 'socks://98.239.198.83:21320' } }

Ils n'ont pas mis à jour leur documentation.

4
Ben Muircroft

En ce qui concerne la version fantôme 2.0.10, le code suivant fonctionne très bien sous ma machine Windows

  phantom.create(["--proxy=201.172.242.184:15124", "--proxy-type=socks5"])
      .then((instance) => {
          phInstance = instance;
          return instance.createPage();
      })
      .then((page) => {
          sitepage = page;
          return page.open('http://newsdaily.online');
      })
      .then((status) => {
          console.log(status);
          return sitepage.property('title');
      })
      .then((content) => {
          console.log(content);
          sitepage.close();
          phInstance.exit();
      })
      .catch((error) => {
          console.log(error);
          phInstance.exit();
      });
4
Suben Saha

utilisez les paquets phantom npm et co npm.

co(function*() {
  const phantomInstance = yield phantom.create(["--proxy=171.13.36.64:808"]);
  crawScheduler.start(phantomInstance);
});
2
qinggangxu

Le temps presse, donc PhantomJS est maintenant capable de définir un proxy "à la volée" (même page par page): voyez ce commit: https://github.com/ariya/phantomjs/commit/efd8dedfb574c15ddaac26ae72690fc2031e6749

Voici un exemple d'utilisation de la nouvelle fonction setProxy (je n'ai pas trouvé d'utilisation de paramètre de page Web, il s'agit d'une utilisation générale de proxy sur une instance de fantôme):

https://github.com/ariya/phantomjs/blob/master/examples/openurlwithproxy.js

Si vous voulez un proxy par page, utilisez une URL complète pour le proxy (schéma, nom d'utilisateur, mot de passe, hôte, port - tout cela, l'URL)

2
deksden

Comme effet secondaire d'essayer de résoudre un problème sur Github pour phantomjs-nodejs j'ai pu configurer un proxy comme suit:

phantom = require 'phantom'
parameters = {
    loadimages: '--load-images=no',
    websecurity: '--web-security=no',
    ignoresslerrors: '--ignore-ssl-errors=yes',
    proxy: '--proxy=10.0.1.235:8118',
}
urls = {
    checktor: "https://check.torproject.org/",
    google: "https://google.com",
}

phantom.create parameters.websecurity, parameters.proxy, (ph) ->
  ph.createPage (page) ->
    page.open urls.checktor, (status) ->
      console.log "page opened? ", status
      page.evaluate (-> document.title), (result) ->
        console.log 'Page title is ' + result
        ph.exit()

Le résultat où le proxy utilise Tor était:

page ouverte? Succès

Le titre de la page est Félicitations. Ce navigateur est configuré pour utiliser Tor.

2
DMfll

Encore une autre solution pour nodejs:

const phantomInstance = await require('phantom').create();
const page = await phantomInstance.createPage();

// get current settings:
var pageSettings = await page.property('settings');
/*
{
  XSSAuditingEnabled: false,
  javascriptCanCloseWindows: true,
  javascriptCanOpenWindows: true,
  javascriptEnabled: true,
  loadImages: true,
  localToRemoteUrlAccessEnabled: false,
  userAgent: 'Mozilla/5.0 (Unknown; Linux x86_64) ... PhantomJS/2.1.1 Safari/538.1',
  webSecurityEnabled: true
}
*/

pageSettings.proxy = 'https://78.40.87.18:808';

// update settings (return value is undefined):
await page.property('settings', pageSettings);

const status = await page.open('https://2ip.ru/');

// show IP:
var ip = await page.evaluate(function () {
    var el = document.getElementById('d_clip_button');
    return !el ? '?' : el.textContent;
});
console.log('IP:', ip);

C'est une option pour définir le proxy dans une page spécifique.

1
Bars

J'utilise PhantomJS à partir de Windows cmd et les syntaxes qu'il utilise semblent légèrement différentes de ce que j'ai remarqué si vous n'avez pas mis http:// PJ ne reconnaîtra pas la valeur que cet exemple est complet 

var page = require('webpage').create();
page.settings.loadImages = false;  //    
page.settings.proxy = 'http://192.168.1.5:8080' ; 
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('http://some.com/page', function() {
  page.render('some.png');
  phantom.exit();
});
0
Salem

L'exemple CoffeeScript est un peu étrange, car c'est la browser qui est passée dans le rappel de phantom.create et non pas page, mais sinon, il doit être compatible à en juger par le code .

var phantom = require('phantom');
phantom.create({
    parameters: {
        proxy: '98.239.198.83:21320'
    }
}, function(browser){
    browser.createPage(function(page){
        page.open('http://example.com/req.php', function() {
            ...
        });
    });
});

Les paramètres de proxy sont définis lors de la création du processus, pas lors de l'ouverture de la page. Bien que PhantomJS contienne une fonction non documentée phantom.setProxy() qui vous permet de modifier les paramètres de proxy au milieu du script. Le module fantôme semble aussi le supporter .

0
Artjom B.