Dieses Mal besteht der Zweck darin, den Chrome-Browser mithilfe von Selen zu steuern und die im WEB-Dienst gespeicherten Dateien herunterzuladen. Ein weiterer wichtiger Zweck ist es, denselben Download in PHP und Python durchzuführen und die Ergebnisse zu vergleichen. Der ursprüngliche Zweck des Downloads war das Anhängen einer WEB-Mail, aber jetzt ist es meistens mit PHP-Code wie Slack und Facebook Cybozu möglich. Einem bestimmten Redakteur, der diese Geschichte gehört hat, wurde gesagt, dass es sich um einen Hack handelt, aber es ist im Grunde dasselbe wie sich selbst anzumelden und herunterzuladen. Es ist also ein guter Prozess, dies stolz zu tun. Im Folgenden wird PHP einen Selen-Webdriver verwenden, der sich jetzt komplizierter anfühlt als Python. Bei der Ausführung unter PHP habe ich auf den folgenden Artikel verwiesen. Es gibt verschiedene Vorbereitungen, wie in diesem Artikel beschrieben. "Chrome automatisch mit PHP unter Verwendung von Selen betreiben" Starten Sie nach Abschluss der Vorbereitung Selen.
java -jar selenium-server-standalone.jar &
Dieser Code enthält einige unbeabsichtigte Teile. Infolgedessen habe ich den Code verwendet, weil ich mich durch Ausprobieren erfolgreich anmelden und herunterladen konnte. Zum Beispiel brauche ich keinen Screenshot, aber ich habe ihn so belassen, wie er war, weil ich ihn herunterladen konnte, als ich ihn nahm. In PHP kann Selen schwieriger sein. Ich freue mich darauf zu sehen, was passiert, wenn ich von nun an dasselbe mit Python mache, aber ich frage mich, ob es in Ordnung ist, dies in derselben Umgebung zu tun, da ich Selen auch für Python separat installieren muss.
download.php
require_once './vendor/autoload.php';
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\WebDriverExpectedCondition;
use Facebook\WebDriver\WebDriverBy;
//Geben Sie den Pfad des heruntergeladenen Chrome-Treibers an
$screenPath = $relative.'/g_screenshot.png';
$driverPath = '/usr/local/bin/chromedriver';
putenv("webdriver.chrome.driver=" . $driverPath);
//Zum Festlegen von Optionen beim Starten von Chrome
$options = new ChromeOptions();
//Geben Sie an, dass Sie kopflos starten möchten
$options->addArguments([
'--no-sandbox',
'--headless', //Angegeben, um kopflos zu starten. Die Download-Ordnerspezifikation ist ungültig.
'--disable-gpu', //Kopflose und vorläufig erforderliche Flaggen
'--ignore-certificate-errors', //Zeigt die Fehlerseite des SSL-Sicherheitszertifikats nicht an (Seite "Das Sicherheitszertifikat für diese Site ist nicht vertrauenswürdig").
]);
$caps = DesiredCapabilities::chrome();
$caps->setCapability(ChromeOptions::CAPABILITY, $options);
$driver = ChromeDriver::start($caps, null, 1000*60*5, 1000*60*10);
$path = dirname(__FILE__).'/data'; #Pfad des herunterzuladenden WEB-Servers (Pfad von diesem Programm)
$this->setDownloadDir($driver, $path);
$driver->manage()->window()->maximize();
//Virtueller Login,$atarget ist der Link der herunterzuladenden Datei
$driver->get($wtarget); #Die mit verlinkte Datei wird heruntergeladen.
$element = $driver->findElement(WebDriverBy::name('username'));
$element->sendKeys($wuser);
$element = $driver->findElement(WebDriverBy::name('password'));
$element->sendKeys($wpass);
$element->submit();
$driver->manage()->timeouts()->implicitlyWait(5);
$driver->takeScreenshot($screenPath);
//$driver->manage()->getCookies();
//Virtuelle Anmeldung abgeschlossen
Das ist ein Problem Python 3.7.5 (Standard, 1. November 2019, 19:15:52) gibt immer noch einen Fehler aus, aber einen anderen Python 2.7.17 (Standard, 25. Oktober 2019, 10:08:31) funktioniert einwandfrei. Vielleicht ist es die Beziehung zwischen den Modulen, die die beiden Umgebungen aufrufen.
webdriver.py
#Es ist ein endloses Memo für mich.
from selenium import webdriver # from <module> import <driver>
# ImportError: cannot import name 'webdriver' from 'selenium' (unknown location)
Ich denke, es ist fast ein Pfadproblem, aber Python 3.7.5 ist immer noch fehlerhaft.
Ich habe mit Pythos Beispiel getestet, als ich Selen mit PHP gestartet habe, aber zu diesem Zeitpunkt wurde das funktionierende Python-Beispiel gestoppt, als ich den Webdriver geladen habe. Der Fehler zeigt die Version von Google-Chrome und die Version von Chromedriver an und es scheint, als würde es abstürzen. Wenn Sie für PHP das derzeit implementierte Google-Chrome und den Chromedriver ändern, stürzt Google-Chrome ab. Es scheint einen Grund für diese Beziehung zu geben. Ich bin ein wenig besorgt.
Recommended Posts