Linux(CentOS、Ubuntu)搭建selenium+php-webdriver web自动化测试环境详细教程
5505阅读
0评论
0点赞
因为前段时间采集的一个目标站突然做了防采集(通过js加载内容,js代码加密了),我又不懂解密js,就想着通过php模拟浏览器渲染js加载内容,查了下资料才发现有这么个玩意可以控制浏览器(chrome、firefox等,我使用的是chrome),完全满足了我的需求。不过网上查的资料都比较乱,这里就做了个整合,也当做为自己做个记录文档,方便以后查阅。 我是用的root账户安装,非root账号执行某些命令前请自行加上sudo
安装前准备
安装java环境
已有Java环境的跳过这一步 CentOS:yum -y install java-1.8.0 -openjdk*x86_64Ubuntu: 方法1:
apt -y install openjdk- 8 -jre-headless方法2:
add-apt-repository ppa:openjdk-r/ppa apt update apt -y install openjdk-8-jdk
安装php
php安装方法就不说了,网上很多,也可以使用宝塔、护卫神、lnmp.org之类的一键安装包。安装composer
composer安装教程我在另一个篇文章有写到,不会安装的可以到这里看:Linux安装composer教程安装用到的软件包
CentOS:yum -y install wget unzipUbuntu:
apt -y install wget unzip开始安装
安装chrome
CentOS: 方法1: 在线安装yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm方法2: 先下载安装包再安装
wget -c https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm yum -y install ./google-chrome-stable_current_x86_64.rpmUbuntu:
apt -y install libxss1 libappindicator1 libindicator7 wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb dpkg -i ./google-chrome-stable_current_amd64.deb apt -f -y install
下载selenium
地址:http://selenium-release.storage.googleapis.com/index.html 我下载的3.9.1版本,下载到 /usr/local/selenium/ 目录下 创建目录并下载mkdir /usr/local/selenium wget -c http://selenium-release.storage.googleapis.com/3.9/selenium-server-standalone-3.9.1.jar -O /usr/local/selenium/selenium-server-standalone.jar
下载chromedriver
地址:https://chromedriver.storage.googleapis.com/index.html chromedriver的版本要跟安装的chrome的版本相对应,如果没有一样的版本就选择版本号最接近的。 查看chrome版本:/opt/google/chrome/chrome -version我的chrome版本: 102.0.5005.61 查看chrome版本 chromedriver同样下载解压到
/usr/local/selenium/目录下
wget -c https://chromedriver.storage.googleapis.com/102.0.5005.61/chromedriver_linux64.zip -O /usr/local/selenium/chromedriver_linux64.zip unzip /usr/local/selenium/chromedriver_linux64.zip -d /usr/local/selenium/
使用composer安装php-webdriver
先进入项目目录再拉取,我的目录路径是/home/phpwebdriver/ cd /home/phpwebdriver/ composer require php-webdriver/webdrivercomposer安装php-webdriver
运行&测试
运行selenium服务
执行命令后将无法做其他操作,建议在screen里面运行或者用nohup命令screen -S selenium java -jar -Dwebdriver.chrome.driver="/usr/local/selenium/chromedriver" /usr/local/selenium/selenium-server-standalone.jar -port 6666运行selenium 然后按 ctrl+a+d 可以退出screen环境。
测试
新建个 notevm.php 文件,写入以下代码。addArguments(array('--no-sandbox','--disable-dev-shm-usage')); $options->addArguments(array('--headless'));//无头模式,不会弹出浏览器窗口,没有安装图形界面的一定要设置这个 //$options->setExperimentalOption('prefs', array('profile.managed_default_content_settings.images'=>2));//禁止加载图片 $capabilities = DesiredCapabilities::chrome(); $capabilities->setCapability(ChromeOptions::CAPABILITY, $options); $host = 'http://127.0.0.1:6666/wd/hub';//selenium服务监听地址 $driver = RemoteWebDriver::create($host,$capabilities,5000); $size = new WebDriverDimension(1920,1080);//窗口大小 $driver->manage()->window()->setSize($size);//设置窗口大小 //$driver->manage()->window()->maximize();//浏览器窗口最大化 $driver->get('https://www.notevm.com/');//打开网页 /* $driver->wait(10,100)->until( //等待class为navbar-search-icon的元素加载完成,最多等待10秒,每100毫秒重试一次 function () use ($driver){ return $driver->findElements(WebDriverBy::className('navbar-search-icon')); } ); */ $driver->manage()->timeouts()->implicitlyWait(10);//等待所有元素加载完成,最多等待10秒 $driver->findElement(WebDriverBy::className('navbar-search-icon'))->click();//点击搜索按钮 $driver->findElement(WebDriverBy::className('navbar-search-input'))->click();//点击输入框 $driver->getKeyboard()->sendKeys('php');//输入php $driver->findElement(WebDriverBy::className('navbar-search-btn'))->click();//点击搜索按钮 /* $driver->getKeyboard()->pressKey(WebDriverKeys::ENTER);//按下回车键 $driver->getKeyboard()->releaseKey(WebDriverKeys::ENTER);//释放回车键 */ $driver->wait(10,100)->until( function () use ($driver){ return $driver->findElements(WebDriverBy::className('main'));//等待class为main的元素加载完成 } ); $driver->takeScreenshot('./notevm.png');//截图,如果系统没有安装中文支持的话,中文会出现乱码 $driver->findElement(WebDriverBy::className('main'))->takeElementScreenshot('notevm-main.png');//截取某个元素的图片 $html = $driver->getPageSource();//获取html $driver->quit();//退出浏览器 file_put_contents('./html.txt',$html);//保存HTML到文件 ?>执行 php notevm.php 测试抓取效果 可以看到成功截两张图片跟保存了html代码。
评论(0)
暂无评论