php+selenium爬虫

作者:zarte    发布时间: 2019-06-25

php爬虫selenium

## Selenium-Server-Standalone与webdriver的区别 不同的浏览器有 不同的driver来驱动 firefoxDriver,chromeDriver有一个缺点,就是浏览器必须和我的项目在同一台机器上。这样一来,有如下几个缺点 1. linux必须安装firefox,chrome浏览器,操作十分麻烦,而且受Linux版本限制。本人安装firefox还好,下载后解压就可以了,而chrome下载后还需要执行一些别的安装操作,由于linux是openSuse11的,缺各种包,从未安装成功过。 1. 由于是linux系统,跑UI测试的时候,如果没有安装xmanager传输图形化界面,是看不到运行效果的(ps:无头模式可运行) 1. 在Linux上firefox浏览器运行测试总会有各种各样的问题,例如driver连接7055端口超时,在windows环境下则没有出现过。 鉴于上述问题,因此,想将测试和浏览器进行分离,通过控制远程机器的浏览器运行测试,而不仅限于在项目所在机器上。Selenium-Server-StandAlone很好的解决了这个问题 ## 开发步骤 ### java环境 selenium运行文件是一个jar包,你必须搭建好java运行的环境才能启用selenium。 具体安装以及环境变量的配置请参考:[https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html](https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html) ### 运行命令 这里以chromeDriver为驱动,可自行选择其他。 java -jar -Dwebdriver.chrome.driver="D:\WWW\test\crawtestphp\other\chromedriver.exe" D:\WWW\test\crawtestphp\other\selenium-server-standalone-3.4.0.jar -port 4444 ### selenium API组件 [webdriver下载](https://github.com/facebook/php-webdriver) 这是 facebook 开发的一套 selenium API 的客户端组件,使用 composer 作为依赖管理工具。 **composer方式 ** composer require facebook/webdriver ### 具体代码 这里贴一小部分,具体可以去github上查看。 ~~~php namespace Facebook\WebDriver; use Facebook\WebDriver\Remote\DesiredCapabilities; use Facebook\WebDriver\Remote\RemoteWebDriver; require_once('vendor/autoload.php'); // start Chrome with 5 second timeout $host = 'http://localhost:4444/wd/hub'; // this is the default $capabilities = DesiredCapabilities::chrome(); $driver = RemoteWebDriver::create($host, $capabilities, 5000); // navigate to 'http://www.seleniumhq.org/' $driver->get('https://www.seleniumhq.org/'); // adding cookie $driver->manage()->deleteAllCookies(); $cookie = new Cookie('cookie_name', 'cookie_value'); $driver->manage()->addCookie($cookie); $cookies = $driver->manage()->getCookies(); print_r($cookies); // click the link 'About' $link = $driver->findElement( WebDriverBy::id('menu_about') ); $link->click(); // wait until the page is loaded $driver->wait()->until( WebDriverExpectedCondition::titleContains('About') ); // print the title of the current page echo "The title is '" . $driver->getTitle() . "'\n"; // print the URI of the current page echo "The current URI is '" . $driver->getCurrentURL() . "'\n"; // write 'php' in the search box $driver->findElement(WebDriverBy::id('q')) ->sendKeys('php') // fill the search box ->submit(); // submit the whole form // wait at most 10 seconds until at least one result is shown $driver->wait(10)->until( WebDriverExpectedCondition::presenceOfAllElementsLocatedBy( WebDriverBy::className('gsc-result') ) ); // close the browser $driver->quit(); ~~~

上一篇:  远程连接无法直接复制粘贴内容解决方法

下一篇:  elementui分页改变当前页失败

加载更多