米扑博客在上一篇《PHP + Selenium + WebDriver 抓取米扑科技首页》已经详细介绍了PHP + Selenium + Chrome / Firefox 抓取网页

本文将介绍通过 PHP + Selenium 解析网页内容,并实现自动登录,这些都是爬虫常用的需求功能

 

html 解析库,用于解析网页,类似于selenium

下载 simple_html_dom.php 或 直接下载 simple_html_dom.php.zip

帮助文档:PHP Simple HTML DOM Parser Manual

下载后,放在下面代码的同一级目录,用于解析网页正文

 

PHP + Selenium + Firefox 抓取网页

<?php
require_once('/opt/php-selenium/vendor/autoload.php');
include_once('simple_html_dom.php');
header("content-type:text/html; charset=xxx");

try {
	$host = "http://localhost:8888/wd/hub";
	$desired_capabilities = DesiredCapabilities::firefox();
	$driver = RemoteWebDriver::create($host, $desired_capabilities);
	
	// 打开登录页面
	$url = 'https://proxy.mimvp.com/usercenter/login.php';
	$driver->get($url);
	var_dump($driver->getTitle());
	
	$element = $driver->findElement(WebDriverBy::id('user_email'));
	$element->clear(); 			// 清空
	$element->sendKeys('abc@mimvp.com');	// 自动填写淘宝用户名
	$element = $driver->findElement(WebDriverBy::id('user_pwd'));
	$element->clear(); 			// 清空
	$element->sendKeys('123456');		// 自动填写淘宝密码
	$driver->findElement(WebDriverBy::id('postcontent'))->click();
	
	$page_source = $driver->getPageSource();
	echo '<br><br> login_page - strlen($page_source) : ' . strlen($page_source);

	
	// 爬取用户中心(登录后的页面)
	$url = 'https://proxy.mimvp.com/usercenter/userinfo.php';
	$driver->get($url);
	var_dump($driver->getTitle());
	$page_source = $driver->getPageSource();
	echo '<br><br> userinfo_page - strlen($page_source) : ' . strlen($page_source);
	
	// 格式化网页内容
	$html_dom = str_get_html( $page_source );
	$table_element = $html_dom->find('.userinfo_welcome', 0);
	var_dump(trim($table_element->plaintext));
	
	$driver->quit();
} catch (Exception $e) {
	var_dump($e->getMessage());
}
?>

 

运行结果:

string '会员登录 - 米扑代理' (length=27)

login_page - strlen($page_source) : 18845
string '会员中心 - 米扑代理' (length=27)

userinfo_page - strlen($page_source) : 56402
string '欢迎 abc@mimvp.com' (length=23)

 

爬取得网页是米扑代理:https://proxy.mimvp.com/usercenter/login.php

Firefox 登录的瞬间截图:

 

 

问题:

Chrome is being controlled by automated test software

解决:

$desired_capabilities = DesiredCapabilities::chrome();
$desired_capabilities->setCapability('acceptSslCerts', true);
$options = new ChromeOptions();
$options->addArguments(array("disable-infobars"));
$desired_capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
$driver = RemoteWebDriver::create($host, $desired_capabilities);

 

 

参考推荐

PHP + Selenium + WebDriver 抓取米扑科技首页

PHP 获取网页标题(title)、描述(description)、关键字(keywords)等meta信息

Python+Selenium2 搭建自动化测试环境

selenium实现Xvfb在linux上无界面运行

Python + Selenium2 + Chrome 爬取网页

selenium+php-webdriver实现抓取淘宝页面