サーバ上でJava Seleniumのチュートリアルを実行
前言
前に国民的K歌に登场するSelemiunコードを书きますが、ローカルで走るしかないことに気づきました.サーバーに配置すると変なブラウザが见つからないエラーが発生します.それは役に立ちませんよね.その後、Hcbbt巨巨巨は私にチュートリアルを送ってくれたが、何かが少なくなったことに気づいた.今この完全な過程を書いて、みんなに役に立つことを望んでいます.
に頼る
新しいMavenプロジェクトはpomにあります.xmlにSeleniumとコンパイルパッケージの構成を加えます.完全なpom.xmlは以下の通りです.
そしてChromeを使っているのでChromeのWebDriverファイルを.ここへ降りてhttps://sites.google.com/a/chromium.org/chromedriver/
スタート
まず短くて最も簡単なコードを書いて、ローカルで走ることができるかどうかを見てみましょう.アカリンの図~コードを登ってみましょう.
そのlocalは私たちがローカルに保管しているchromedriverの位置です.
そしてUrlの塊が印刷されるはずです.説明はこれでいいです.
次に、デスクトップ環境のないサーバに配備してみます.さっきローカルのchromedriverの位置をサーバの位置に変更します.
配置
そしてこのファイルをサーバーに持って行きます.
サーバーはChromeをインストールします.まだ入っていなければこんなふうに着てもいいです.
そして前に私はここにいました.もしあなたが今直接
これはXvfbというものがインストールされていないからです.
次にXvfbをインストールする:
ここではroot権限で走ってはいけません.そうしないとChrome not reachableのエラーが報告されます.
そして出力が見えます.
以上です.
前に国民的K歌に登场するSelemiunコードを书きますが、ローカルで走るしかないことに気づきました.サーバーに配置すると変なブラウザが见つからないエラーが発生します.それは役に立ちませんよね.その後、Hcbbt巨巨巨は私にチュートリアルを送ってくれたが、何かが少なくなったことに気づいた.今この完全な過程を書いて、みんなに役に立つことを望んでいます.
に頼る
新しいMavenプロジェクトはpomにあります.xmlにSeleniumとコンパイルパッケージの構成を加えます.完全なpom.xmlは以下の通りです.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.zlxgroupId>
<artifactId>selenium-exampleartifactId>
<version>1.0-SNAPSHOTversion>
<dependencies>
<dependency>
<groupId>org.seleniumhq.seleniumgroupId>
<artifactId>selenium-javaartifactId>
<version>2.53.1version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.1version>
<configuration>
<source>1.8source>
<target>1.8target>
<encoding>UTF8encoding>
configuration>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-assembly-pluginartifactId>
<version>2.5.5version>
<configuration>
<archive>
<manifest>
<mainClass>SeleniumExamplemainClass>
manifest>
archive>
<descriptorRefs>
<descriptorRef>jar-with-dependenciesdescriptorRef>
descriptorRefs>
configuration>
<executions>
<execution>
<id>make-assemblyid>
<phase>packagephase>
<goals>
<goal>singlegoal>
goals>
execution>
executions>
plugin>
plugins>
build>
project>
そしてChromeを使っているのでChromeのWebDriverファイルを.ここへ降りてhttps://sites.google.com/a/chromium.org/chromedriver/
スタート
まず短くて最も簡単なコードを書いて、ローカルで走ることができるかどうかを見てみましょう.アカリンの図~コードを登ってみましょう.
そのlocalは私たちがローカルに保管しているchromedriverの位置です.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.util.List;
/**
* Created by purefrog on 23/06/2017.
*/
public class SeleniumExample {
public static String local = "/Users/purefrog/Downloads/chromedriver";
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", local);
ChromeOptions options = new ChromeOptions();
options.addArguments("window-size=1280,728"); //
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver webDriver = new ChromeDriver(cap);
String url = "https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111111&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E9%98%BF%E5%8D%A1%E6%9E%97&oq=%E9%98%BF%E5%8D%A1%E6%9E%97&rsp=-1";
try {
webDriver.get(url);
Thread.sleep(10000);
List webElements = webDriver.findElements(By.xpath("//img[@class='main_img img-hover']"));
for (WebElement e : webElements) {
System.out.println(e.getAttribute("src"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
webDriver.close();
}
}
}
そしてUrlの塊が印刷されるはずです.説明はこれでいいです.
次に、デスクトップ環境のないサーバに配備してみます.さっきローカルのchromedriverの位置をサーバの位置に変更します.
配置
mvn clean install
ちょっと.このときプロジェクトディレクトリのtarget
下にselenium-example-1.0-SNAPSHOT-jar-with-dependencies.jar
ファイルが表示されます.そしてこのファイルをサーバーに持って行きます.
サーバーはChromeをインストールします.まだ入っていなければこんなふうに着てもいいです.
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -f
dpkg -i google-chrome-stable_current_amd64.deb
そして前に私はここにいました.もしあなたが今直接
java -jar xxx.jar
で走っていたら、この間違いを報告するはずです!Starting ChromeDriver 2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57) on port 14103
Only local connections are allowed.
Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited abnormally
(Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 4.9.15-x86_64-linode81 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.13 seconds
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'localhost', ip: '127.0.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.15-x86_64-linode81', java.version: '1.8.0_131'
Driver info: driver.version: ChromeDriver
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$new$0(JsonWireProtocolResponse.java:53)
at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$getResponseFunction$2(JsonWireProtocolResponse.java:91)
at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$22(ProtocolHandshake.java:365)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:368)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:159)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:137)
at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:184)
at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:148)
at SeleniumExample.main(SeleniumExample.java:25)
これはXvfbというものがインストールされていないからです.
次にXvfbをインストールする:
sudo apt install Xvfb
Xvfbサービスを開始する:Xvfb -ac :7 -screen 0 1280x1024x8 &
(これはxであり、*ではないことに注意してください)そしてもう一つ必要なもの:export DISPLAY=:7
そして走れる!ここではroot権限で走ってはいけません.そうしないとChrome not reachableのエラーが報告されます.
java -jar selenium-example-1.0-SNAPSHOT-jar-with-dependencies.jar
そして出力が見えます.
以上です.