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é.
{ parameters: { 'proxy': 'socks://98.239.198.83:21320' } }
Ils n'ont pas mis à jour leur documentation.
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();
});
utilisez les paquets phantom npm et co npm.
co(function*() {
const phantomInstance = yield phantom.create(["--proxy=171.13.36.64:808"]);
crawScheduler.start(phantomInstance);
});
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)
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.
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.
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();
});
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 .