Processing에서 Selenium을 사용해 보자.
6957 단어 processing셀레늄
안녕하세요!
그래, 슬슬 재료 조각입니다.
좋아, 잘 부탁드립니다! ! !
처리
미디어 아트 방면의 사람에게는 친숙한, 가트라고 써 구워트와 움직이는 녀석입니다.
Web계의 사람에게는 Processing.js 이나, 후계의 p5.js 쪽이 친숙할지도 모르겠네요. 그것의 기초가 된 사람입니다.
Processing은 Java 호환의 프레임워크이므로, 개발 환경인 PDE 에 소정의 설정을 하는 것만으로도 통상으로 Selenium의 Java판 클라이언트를 사용할 수 있게 됩니다.
실제로 해보자.
준비
Selenium 공식 다운로드 페이지 에서 Java 버전의 클라이언트 라이브러리 세트를 다운로드하십시오. 이 기사에서는 버전 3.141.59를 사용합니다.
다운로드가 끝나면 모든 jar 파일을 라이브러리 폴더에 넣습니다. macOS의 경우 /Users/[自分のホームディレクトリー]/Documents/Processing3
가 PDE의 설정 디렉토리에 있다고 생각합니다. 그 아래의 libraries
아래에 selenium
그리고 그 아래에 library
와 디렉토리를 만들고 그 안에 jar 파일을 모두 넣습니다.
그런 다음 가져오고 사용하는 클라이언트 라이브러리의 파일 이름을 변경하여 libraries
바로 아래의 디렉토리 이름 selenium
와 일치시킵니다. 이렇게 하지 않으면 PDE에서 클라이언트 라이브러리를 가져올 수 없습니다.
지금까지 가능하면 PDE를 시작합시다. Selenium 클라이언트를 사용할 수 있습니다.
샘플 코드
대략적으로는 다음 샘플과 같은 코드를 PDE에 쓸 수 있습니다.
아마도 Processing에서 Selenium을 사용할 때 실시간으로 얻은 브라우저의 스크린 샷 이미지를 처리하지 않거나 표시하지 않을까요?
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
WebDriver driver;
PImage pngImage;
void setup()
{
frameRate(15);
ChromeOptions options = new ChromeOptions();
options.setHeadless(true);
driver = new ChromeDriver(options);
}
void dispose()
{
driver.quit();
println("disposed.");
}
void draw()
{
background(0);
if (pngImage != null)
{
image(pngImage, 0, 0);
}
if (frameCount % frameRate == 1)
{
thread("getScreenshotFromThread");
}
}
void getScreenshotFromThread()
{
driver.get("http://example.selenium.jp/reserveApp/");
File pngFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
pngImage = loadImage(pngFile.getAbsolutePath());
}
Processing에서 이용할 때 주의하는 포인트는 다음과 같을 것입니다.
준비
Selenium 공식 다운로드 페이지 에서 Java 버전의 클라이언트 라이브러리 세트를 다운로드하십시오. 이 기사에서는 버전 3.141.59를 사용합니다.
다운로드가 끝나면 모든 jar 파일을 라이브러리 폴더에 넣습니다. macOS의 경우
/Users/[自分のホームディレクトリー]/Documents/Processing3
가 PDE의 설정 디렉토리에 있다고 생각합니다. 그 아래의 libraries
아래에 selenium
그리고 그 아래에 library
와 디렉토리를 만들고 그 안에 jar 파일을 모두 넣습니다.그런 다음 가져오고 사용하는 클라이언트 라이브러리의 파일 이름을 변경하여
libraries
바로 아래의 디렉토리 이름 selenium
와 일치시킵니다. 이렇게 하지 않으면 PDE에서 클라이언트 라이브러리를 가져올 수 없습니다.지금까지 가능하면 PDE를 시작합시다. Selenium 클라이언트를 사용할 수 있습니다.
샘플 코드
대략적으로는 다음 샘플과 같은 코드를 PDE에 쓸 수 있습니다.
아마도 Processing에서 Selenium을 사용할 때 실시간으로 얻은 브라우저의 스크린 샷 이미지를 처리하지 않거나 표시하지 않을까요?
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
WebDriver driver;
PImage pngImage;
void setup()
{
frameRate(15);
ChromeOptions options = new ChromeOptions();
options.setHeadless(true);
driver = new ChromeDriver(options);
}
void dispose()
{
driver.quit();
println("disposed.");
}
void draw()
{
background(0);
if (pngImage != null)
{
image(pngImage, 0, 0);
}
if (frameCount % frameRate == 1)
{
thread("getScreenshotFromThread");
}
}
void getScreenshotFromThread()
{
driver.get("http://example.selenium.jp/reserveApp/");
File pngFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
pngImage = loadImage(pngFile.getAbsolutePath());
}
Processing에서 이용할 때 주의하는 포인트는 다음과 같을 것입니다.
dispose()
를 반드시 쓰고 Sketch가 끝날 때 브라우저와 브라우저 드라이버를 반드시 종료하십시오.dispose()
불가능하게 종료해 버리는 일도 있습니다. 개발 중에는 정기적으로 브라우저와 브라우저 드라이버의 나머지 과정을 killall
등으로 청소합시다. WebDriver.get()
이나 TakesScreenshot.getScreenshotAs()
를 draw()
에서 실행해 버리면, 1 프레임의 실행에 걸리는 시간이 현격히 늘어나 버려, 제대로 그릴 수 없게 됩니다. thread()
등을 이용해, 다른 thread내에서 실행하도록(듯이) 합시다. TakesScreenshot.getScreenshotAs()
의 결과는 byte[]
에서 받고 싶은 곳입니다만, Processing의 API 범위에서는 PNG 이미지의 바이트열을 간단하게 비트맵에 전개할 수 없습니다. 오버헤드는 매우 신경이 쓰입니다만, 한 번 파일에 출력해 loadImage()
하는 편이 심플한 코드를 쓸 수 있을 것입니다.byte[]
이번에는 여기까지
다음 번은 ... 누군가! 누군가 와줘! ! !
Selenium/Appium Advent Calendar 2018은 여전히 당신의 도전을 기다리고 있습니다!
Reference
이 문제에 관하여(Processing에서 Selenium을 사용해 보자.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hiroshitoda/items/aaac63c3c6aaa06471c2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Processing에서 Selenium을 사용해 보자.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hiroshitoda/items/aaac63c3c6aaa06471c2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)