wake-up-neo.com

Wie setze ich Proxy in Phantomjs?

Diese https://www.npmjs.com/package/phantom#functionality-details page sagt:

Sie können Befehlszeilenschalter auch an den phantomjs-Prozess übergeben, indem Sie zusätzliche Argumente für phantom.create () angeben, z.

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

oder indem Sie sie im options * Objekt angeben:

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

Diese Beispiele sind nur in Kaffee-Skripts und sie deuten an, dass die Erstellungsfunktion funktionieren kann

create('string',function)

oder

create([object object],function)

aber der erste erwartete Parameter ist die Funktion!

Ich wollte unbedingt versuchen, http://phantomjs.org/api/command-line.html Ich habe vielleicht die falsche Idee, aber für mich sieht es so aus, als könnten sie in der Create - Funktion verwendet werden (kurz bevor Sie die createPage), irre ich mich?

Ich habe mehrere Dinge ausprobiert, das logischste ist folgendes:

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'}});});

Die Seite wird also geöffnet. Ich weiß das, weil ich req.php das $ _SERVER-Objekt auf einem TXT-Pad speichern möchte, aber die REMOTE_ADDR- und REMOTE_PORT-Header sind nicht die im Proxy, den ich eingestellt habe. Sie haben keine Wirkung. Ich habe auch versucht:

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

Wenn die Dokumente dieses Objekt aufrufen, wird das Objekt options * * oben ^ angezeigt

und

'--proxy=98.239.198.83:21320'

Ich hatte auch eine Dig durch das Phantom-Modul, um die Create-Funktion zu finden. Es ist nicht in js geschrieben. Ich kann es zumindest nicht sehen. Es muss in C++ sein. Anscheinend wurde dieses Modul aktualisiert, aber die Beispiele im Inneren des Moduls sehen aus wie alter Code.

Wie mache ich das?

EDIT:

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() {

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

Dies führt zu keinem Fehler und die Seite wird gelöscht, der Proxy wird jedoch ignoriert.

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

Sie haben ihre Dokumente nicht aktualisiert.

4
Ben Muircroft

In der Version 2.0.10 von phantom läuft der folgende Code auf meinem Windows-Rechner sehr gut

  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

Die Zeit vergeht, und PhantomJS kann jetzt den Proxy "on the fly" (auch auf Seitenbasis) einstellen: Siehe hierzu Commit: https://github.com/ariya/phantomjs/commit/efd8dedfb574c15ddaac26ae72690fc2031e6749

Hier ist ein Beispiel für die Verwendung der neuen setProxy-Funktion (ich habe keine Verwendung der Webseiteneinstellungen gefunden, dies ist die allgemeine Verwendung des Proxys bei einer Phantom-Instanz):

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

Wenn Sie einen seitenweisen Proxy wünschen, verwenden Sie die vollständige URL für den Proxy (Schema, Benutzername, Kennwort, Host, Port - die URL).

3
deksden

benutze phantom npm package und co npm package.

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

Als Nebeneffekt beim Versuch, eine -Ausgabe auf Github für phantomjs-nodejs herauszufinden, konnte ich einen Proxy wie folgt einstellen:

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()

Das Ergebnis, in dem der Proxy Tor verwendet, war:

seite geöffnet? Erfolg

Seitentitel ist Glückwünsche. Dieser Browser ist für die Verwendung von Tor konfiguriert.

2
DMfll

Noch eine andere Lösung für 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);

Es ist eine Option, um Proxy auf einer bestimmten Seite festzulegen.

1
Bars

Ich verwende PhantomJS mit Windows-Cmd und Syntaxen, die es verwendet. Es sieht ein bisschen anders aus, als wenn ich http:// nicht eingegeben habe 

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

Das CoffeeScript-Beispiel ist ein wenig seltsam, da die browser an den Callback von phantom.create und nicht page übergeben wird. Andernfalls muss die Kompatibilität mit dem code erfolgen.

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() {
            ...
        });
    });
});

Proxy-Einstellungen werden bei der Prozesserstellung festgelegt, nicht beim Öffnen der Seite. PhantomJS enthält zwar eine undokumentierte phantom.setProxy()-Funktion, mit der Sie die Proxy-Einstellungen in der Mitte des Skripts ändern können. Das Phantom-Modul scheint auch es zu unterstützen .

0
Artjom B.