php+selenium爬虫

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

php爬虫selenium

Selenium-Server-Standalone与webdriver的区别

不同的浏览器有 不同的driver来驱动
firefoxDriver,chromeDriver有一个缺点,就是浏览器必须和我的项目在同一台机器上。这样一来,有如下几个缺点

  1. linux必须安装firefox,chrome浏览器,操作十分麻烦,而且受Linux版本限制。本人安装firefox还好,下载后解压就可以了,而chrome下载后还需要执行一些别的安装操作,由于linux是openSuse11的,缺各种包,从未安装成功过。

  2. 由于是linux系统,跑UI测试的时候,如果没有安装xmanager传输图形化界面,是看不到运行效果的(ps:无头模式可运行)

  3. 在Linux上firefox浏览器运行测试总会有各种各样的问题,例如driver连接7055端口超时,在windows环境下则没有出现过。

鉴于上述问题,因此,想将测试和浏览器进行分离,通过控制远程机器的浏览器运行测试,而不仅限于在项目所在机器上。Selenium-Server-StandAlone很好的解决了这个问题

开发步骤

java环境

selenium运行文件是一个jar包,你必须搭建好java运行的环境才能启用selenium。
具体安装以及环境变量的配置请参考: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下载
这是 facebook 开发的一套 selenium API 的客户端组件,使用 composer 作为依赖管理工具。
composer方式

composer require facebook/webdriver

具体代码

这里贴一小部分,具体可以去github上查看。

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分页改变当前页失败

加载更多