Selenium
웹 애플리케이션 테스트를 위한 포터블 프레임워크이다.
환경
1. XAMPP
2. composer
3. 크롬 102버전
composer로 php-webdriver 설치
composer require php-webdriver/webdriver
Windows에서 PHP로 Curl 활성화
php.ini
extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=mbstring
extension=openssl
extension=pdo_mysql
extension=pgsql
extension=shmop
extension=sqlite3
extension=tidy
extension=xmlrpc
extension=xsl
php.ini 파일에서 위의 주석을 해제합니다.
Windows에서 PHP로 SSL 인증서 설정하기
로컬 인증서로 PHP CURL을 수정하려면 다음 단계를 수행해야 합니다.
1. Cacert.pem 다운로드
2. 다운로드한 파일을 C:\\xampp\php\extras\ssl에 복사합니다.
3. php.ini 수정
curl.cainfo = "C:\PHP7\extras\ssl\cacert.pem"
크롬 드라이버 설치
크롬 드라이버를 설치합니다.
크롬 드라이버는 자신의 크롬 버전에 맞춰서 다운로드해야합니다. 현재 기준 최신은 102버전입니다.
Selnium Grid 3 설치
Selenium Grid3설치 후, 파일은 크롬 드라이버와 같은 위치에 놓습니다.
그리드 서버 실행
java -jar selenium-server-standalone-3.141.59.jar
서버를 실행하게되면 localhost:4444 포트가 열리게 됩니다.
PHP코드 작성
<?php
use Facebook\WebDriver;
require_once('./vendor/autoload.php');
$host = "http://localhost:4444/wd/hub";
$driver = Facebook\WebDriver\Remote\RemoteWebDriver::create($host, Facebook\WebDriver\Remote\DesiredCapabilities::chrome("./chromedriver.exe"));
// IDとPWを含めて、Request
$result = $driver->get("https://www.google.com");
// フィルタリングのメインカテゴリーをクリック
$driver->FindElement(WebDriver\WebDriverBy::xpath('/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input'))->click();
// keyboard操作
$driver->getKeyboard()->sendKeys('Selenium'); // 検索フォームに検索語を入力
$driver->getKeyboard()->pressKey("\xEE\x80\x87"); // ENTERを入力
$driver->FindElement(WebDriver\WebDriverBy::xpath('//*[@id="kp-wp-tab-overview"]/div[1]/div/div/div/div/div/div[1]/div/div/div/span[2]/a'))->click();
// idがmain_catである要素を全部読み込む
$text = $driver->FindElements(WebDriver\WebDriverBy::linkText('<br>Selenium'));
sleep(5);
$driver->quit();
?>
$host는 위에서 실행한 selenium grid 주소를 입력해주는데, 3버전에서는 localhost:4444/wd/hub가 됩니다.
Facebook\WebDriver\Remote\RemoteWebDriver::create($host, Facebook\WebDriver\Remote\DesiredCapabilities::chrome("./chromedriver.exe"));
$host와 크롬 드라이버의 값을 매개변수로 넣어주게 되면 사용할 준비가 완료됩니다.
$result = $driver->get("https://www.google.com");
구글 URL에 접속 해서
$driver->FindElement(WebDriver\WebDriverBy::xpath('/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input'))->click();
xpath를 통해서 원하는 요소를 선택한뒤에
click() 메소드를 이용하여 해당 요소를 클릭하도록 합니다.
위의 xpath가 가르키는 곳은 검색창입니다.
$driver->getKeyboard()->sendKeys('Selenium');
$driver->getKeyboard()->pressKey("\xEE\x80\x87");
getKeyboard()의 sendKeys() 메소드를 이용하게되면, 키보드의 기능을 사용할 수 있게되어, 원하는 텍스트를 입력할 수 있습니다.
pressKey() 메소드는 원하는 키를 누르도록 지정할 수 있습니다.
"\xEE\x80\x87"는 ENTER키 입니다.
즉, Selenium을 입력하고 엔터키를 누르는 코드입니다.
$driver->FindElement(WebDriver\WebDriverBy::xpath('//*[@id="kp-wp-tab-overview"]/div[1]/div/div/div/div/div/div[1]/div/div/div/span[2]/a'))->click();
위의 xpath에서는 검색해서 나온 위키백과의 링크를 가르키고 해당 링크를 clilck()합니다.
sleep(5);
$driver->quit();
sleep()를 이용해서 5초동안 멈추고, $driver->quit()로 브라우저를 종료시킵니다.
실제 동작화면
참고 https://www.lambdatest.com/blog/selenium-php-tutorial/
'IT 공부 > PHP' 카테고리의 다른 글
[ PHP ] ImageMagick을 이용하여, PDF파일을 image로 변경 또는 그 반대 (0) | 2022.07.13 |
---|---|
[ PHP ] PDF파일의 페이지 수를 알아내는 법 (0) | 2022.07.06 |
[ PHP ] PDF 파일을 이미지 파일로 ( convert PDF to image ) (0) | 2022.06.01 |
[ PHP ] PHPExcel 를 이용해서 xlsx파일 읽기 (0) | 2022.05.28 |
[ PHP ] CSV파일 내용 불러오기 (Spreadsheet 와 fgetcsv) (0) | 2022.03.02 |