php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, php webdriver 教程, A php client for webdriver.
<p>项目地址:https://github.com/facebook/php-webdriver</p><p> </p>
<h1 id="一技术选型">一、技术选型</h1>
<p> </p>
<p><strong>php + facebook/webdriver + selenium</strong></p>
<p>Selenium是一套完整的Web应用程序测试系统,它提供了一系列的操作浏览器的 API</p>
<p>webdriver 是 facebook 开发的一套 selenium API 的客户端组件,使用 composer 作为依赖管理工具。</p>
<h1> </h1>
<h1 id="二环境搭建">二、环境搭建</h1>
<p> </p>
<ol>
<li>php 的开发环境</li>
<li>webdriver 使用 composer 做依赖管理,所以需要安装 composer</li>
<li>selenium-server 需要 java 运行环境</li>
</ol>
<p>环境配置自己搞定,很简单,这里就不做赘述了。</p>
<h1> </h1>
<h1 id="三开始使用">三、开始使用</h1>
<p> </p>
<p>安装 php-webdriver</p>
<div id="highlighter_857279" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments"># 前提是需要安装好 composer.phar </code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush plain">curl -sS https:</code><code class="Brush plain">//getcomposer</code><code class="Brush plain">.org</code><code class="Brush plain">/installer</code> <code class="Brush plain">| php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush comments"># 安装library</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush plain">php composer.phar require facebook</code><code class="Brush plain">/webdriver</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> </p>
<p>运行 Selenium 服务, 首先你需要到 selenium 官网去下载 selenium-server-standalone-#.jar, 下载地址请狠狠的 戳这里.</p>
<p>或者直接下载最新版 (2018-12-14):selenium-server-standalone-3.9.1</p>
<div id="highlighter_558739" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush plain">java -jar -Dwebdriver.chrome.driver=</code><code class="Brush string">"driver/chromedriver"</code> <code class="Brush plain">selenium-server-standalone-x.xx.x.jar -port 4444</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>需要指定一个 chromedriver(一个阉割版的 chrome 浏览器) ,这里是下载地址 也可以直接下载最新版 (2018-12-14):</p>
<p>chromedriver_mac64 (MAC版)</p>
<p>chromedriver_win32 (Win版)</p>
<p>chromedriver_linux64 (Linux版)</p>
<p>另外:<strong>Java 8+ 必须已经安装</strong>.</p>
<p> </p>
<p>然后创建一个会话,并指定你的服务器运行的地址和端口。</p>
<div class="language-php highlighter-rouge">
<div class="highlight">
<div id="highlighter_359687" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>启动火狐浏览器,前提是你安装了火狐的 Geckodriver</p>
<div class="language-php highlighter-rouge">
<div class="highlight">
<div id="highlighter_582792" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::firefox());</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>或者启动 chrome 浏览器</p>
<div class="language-php highlighter-rouge">
<div class="highlight">
<div id="highlighter_530700" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome());</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>你也可以自定义配置你的浏览器</p>
<div class="language-php highlighter-rouge">
<div class="highlight">
<div id="highlighter_372042" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::chrome();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>更多配置,请参考 这里.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p> </p>
<blockquote>
<p>设置浏览器窗口</p>
</blockquote>
<div class="language-php highlighter-rouge">
<div class="highlight">
<div id="highlighter_754047" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$size</code> <code class="Brush plain">= </code><code class="Brush keyword">new</code> <code class="Brush plain">WebDriverDimension(1280, 900);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->manage()->window()->setSize(</code><code class="Brush variable">$size</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>$driver->manage()->window() 返回的是一个 <strong>WebDriverWindow</strong>, 它提供了以下 API</p>
<table>
<tbody>
<tr>
<td>方法名称</td>
<td>方法说明</td>
</tr>
<tr>
<td>getPosition(), setPosition()</td>
<td>获取,设置浏览器的位置</td>
</tr>
<tr>
<td>getSize(), setSize()</td>
<td>获取,设置浏览器大小</td>
</tr>
<tr>
<td>maximize()</td>
<td>最大化窗口</td>
</tr>
</tbody>
</table>
<blockquote>
<p>发送请求</p>
</blockquote>
<div class="language-php highlighter-rouge">
<div class="highlight">
<div id="highlighter_77258" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'http://www.ikeepstudying.com'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<blockquote>
<p> </p>
<p>操作 DOM 元素</p>
</blockquote>
<p>webdriver 主要提供了 2 个 API 来给我们操作 DOM 元素</p>
<ol>
<li>RemoteWebDriver::findElement(WebDriverBy) 获取单个元素</li>
<li>RemoteWebDriver::findElements(WebDriverBy) 获取元素列表</li>
</ol>
<p>WebDriverBy 是查询方式对象,提供了下面几个常用的方式</p>
<ul>
<li>WebDriverBy::id($id) 根据 ID 查找元素</li>
<li>WebDriverBy::className($className) 根据 class 查找元素</li>
<li>WebDriverBy::cssSelector($selctor) 根据通用的 css 选择器查询</li>
<li>WebDriverBy::name($name) 根据元素的 name 属性查询</li>
<li>WebDriverBy::linkText($text) 根据可见元素的文本锚点查询</li>
<li>WebDriverBy::tagName($tagName) 根据元素标签名称查询</li>
<li>WebDriverBy::xpath($xpath) 根据 xpath 表达式查询,这个很强大。 不了解什么是 xpath 的请参考我前面的文章 XPath 语法</li>
</ul>
<p><strong>实例</strong></p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_891998" class="syntaxhighlighterphp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php comments">// id 查询</code></div>
<div class="line number2 index1 alt1"><code class="php variable">$input</code> <code class="php plain">= </code><code class="php variable">$driver</code><code class="php plain">->findElement(</code></div>
<div class="line number3 index2 alt2"><code class="php spaces"> </code><code class="php plain">WebDriverBy::id(</code><code class="php string">'key'</code><code class="php plain">)</code></div>
<div class="line number4 index3 alt1"><code class="php plain">);</code></div>
<div class="line number5 index4 alt2"><code class="php comments">//往输入框填入元素</code></div>
<div class="line number6 index5 alt1"><code class="php variable">$input</code><code class="php plain">->sendKeys(</code><code class="php string">'iPhone 8'</code><code class="php plain">);</code></div>
<div class="line number7 index6 alt2"><code class="php comments">// xpath 查询</code></div>
<div class="line number8 index7 alt1"><code class="php variable">$button</code> <code class="php plain">= </code><code class="php variable">$input</code><code class="php plain">->findElement(</code></div>
<div class="line number9 index8 alt2"><code class="php spaces"> </code><code class="php plain">WebDriverBy::xpath(</code><code class="php string">"../button"</code><code class="php plain">)</code></div>
<div class="line number10 index9 alt1"><code class="php plain">);</code></div>
<div class="line number11 index10 alt2"><code class="php variable">$button</code><code class="php plain">->click(); </code><code class="php comments">//单击按钮</code></div>
<div class="line number12 index11 alt1"><code class="php comments">//获取列表的 a 标签</code></div>
<div class="line number13 index12 alt2"><code class="php variable">$links</code> <code class="php plain">= </code><code class="php variable">$driver</code><code class="php plain">->findElements(WebDriverBy::cssSelector(</code><code class="php string">".goods-list > .p-img > a"</code><code class="php plain">));</code></div>
<div class="line number14 index13 alt1"><code class="php variable">$aTags</code> <code class="php plain">= [];</code></div>
<div class="line number15 index14 alt2"><code class="php keyword">foreach</code><code class="php plain">(</code><code class="php variable">$links</code> <code class="php keyword">as</code> <code class="php variable">$value</code><code class="php plain">) {</code></div>
<div class="line number16 index15 alt1"><code class="php spaces"> </code><code class="php functions">array_push</code><code class="php plain">(</code><code class="php variable">$aTags</code><code class="php plain">, </code><code class="php keyword">array</code><code class="php plain">(</code></div>
<div class="line number17 index16 alt2"><code class="php spaces"> </code><code class="php string">'href'</code> <code class="php plain">=> </code><code class="php variable">$value</code><code class="php plain">->getAttribute(</code><code class="php string">'href'</code><code class="php plain">),</code></div>
<div class="line number18 index17 alt1"><code class="php spaces"> </code><code class="php string">'title'</code> <code class="php plain">=> </code><code class="php variable">$value</code><code class="php plain">->getAttribute(</code><code class="php string">"title"</code><code class="php plain">)</code></div>
<div class="line number19 index18 alt2"><code class="php spaces"> </code><code class="php plain">));</code></div>
<div class="line number20 index19 alt1"><code class="php plain">}</code></div>
<div class="line number21 index20 alt2"><code class="php plain">print_r(</code><code class="php variable">$aTags</code><code class="php plain">);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> cookies 操作</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_63772" class="syntaxhighlighterphp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php comments">// fetch cookies</code></div>
<div class="line number2 index1 alt1"><code class="php variable">$cookies</code> <code class="php plain">= </code><code class="php variable">$driver</code><code class="php plain">->manage()->getCookies();</code></div>
<div class="line number3 index2 alt2"><code class="php comments">// delete cookies</code></div>
<div class="line number4 index3 alt1"><code class="php variable">$driver</code><code class="php plain">->manage()->deleteAllCookies();</code></div>
<div class="line number5 index4 alt2"><code class="php comments">// add cookies</code></div>
<div class="line number6 index5 alt1"><code class="php variable">$driver</code><code class="php plain">->manage()->addCookie(</code><code class="php keyword">array</code><code class="php plain">(</code></div>
<div class="line number7 index6 alt2"><code class="php spaces"> </code><code class="php string">'name'</code> <code class="php plain">=> </code><code class="php string">'cookie_name'</code><code class="php plain">,</code></div>
<div class="line number8 index7 alt1"><code class="php spaces"> </code><code class="php string">'value'</code> <code class="php plain">=> </code><code class="php string">'cookie_value'</code><code class="php plain">,</code></div>
<div class="line number9 index8 alt2"><code class="php plain">));</code></div>
<div class="line number10 index9 alt1"><code class="php variable">$cookies</code> <code class="php plain">= </code><code class="php variable">$driver</code><code class="php plain">->manage()->getCookies();</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> </p>
<blockquote>
<p>键盘操作</p>
</blockquote>
<ul>
<li>RemoteKeyboard::sendKeys() 输入内容到当前 focus 的元素</li>
<li>RemoteKeyboard::pressKey($key) 按下某个键</li>
<li>RemoteKeyboard::releaseKey($key) 释放某个键</li>
</ul>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_728249" class="syntaxhighlighterphp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php variable">$driver</code><code class="php plain">->getKeyboard()->sendKeys(</code><code class="php string">"登录"</code><code class="php plain">);</code></div>
<div class="line number2 index1 alt1"><code class="php variable">$driver</code><code class="php plain">->getKeyboard()->pressKey(WebDriverKeys::SHIFT); </code><code class="php comments">//按下 Shift 键</code></div>
<div class="line number3 index2 alt2"><code class="php variable">$driver</code><code class="php plain">->getKeyboard()->releaseKey(WebDriverKeys::SHIFT);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> </p>
<blockquote>
<p>鼠标操作</p>
</blockquote>
<ul>
<li>WebDriverMouse::click(WebDriverCoordinates) 单击鼠标</li>
<li>WebDriverMouse::doubleClick(WebDriverCoordinates) 双击鼠标</li>
<li>WebDriverMouse::mouseDown(WebDriverCoordinates) 触发 mousedown 事件</li>
<li>WebDriverMouse::mouseUp(WebDriverCoordinates) 触发 mouseup 事件</li>
<li>WebDriverMouse::click(WebDriverCoordinates, $x, $y) 移动鼠标到指定的位置,触发 mousemove 事件</li>
</ul>
<p> </p>
<blockquote>
<p>注入 JS 代码</p>
</blockquote>
<ul>
<li>RemoteWebDriver::executeScript($script, $args) 执行同步js代码</li>
<li>RemoteWebDriver::executeAsyncScript($script, $args) 执行异步 js 代码</li>
</ul>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_298741" class="syntaxhighlighterphp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php variable">$driver</code><code class="php plain">->executeScript(</code><code class="php string">"document.body.scrollTop = 1000; alert(arguments)"</code><code class="php plain">, [</code><code class="php string">"fuck"</code><code class="php plain">]);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> 截图</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_812182" class="syntaxhighlighterphp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php variable">$driver</code><code class="php plain">->takeScreenshot(</code><code class="php string">"test.png"</code><code class="php plain">);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> </p>
<div class="language-php highlighter-rouge">
<div class="highlight">
<h1>快速开始</h1>
<div class="right tools">
<div class="ui top right pointing dropdown item">
<p>Selenium是用于自动化测试工具,它是在Apache许可证2.0许可的开放源代码工具。Selenium是一套工具,它有助于自动化Web应用程序测试。</p>
<ul>
<li>框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。</li>
<li>使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。</li>
<li>使用简单,可使用Java,Python等多种语言编写用例脚本。</li>
</ul>
</div>
</div>
</div>
</div>
<h4> </h4>
<h4>1.通过composer安装Selenium:</h4>
<div id="highlighter_686021" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush plain">composer </code><code class="Brush keyword">require</code> <code class="Brush plain">facebook/webdriver</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h4>2.下载Selenium Server并启动:</h4>
<div id="highlighter_566399" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments">//到http://www.seleniumhq.org/download/ 下找到Selenium Standalone Server并下载,或到https://chromedriver.storage.googleapis.com/index.html 上面下载。</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush comments">//到命令提示符里启动以下命令(前提需要安装jdk,确保java命令能够运行)</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="Brush plain">java -jar selenium-server-standalone-2.42.2.jar</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h4>3. 运行测试代码</h4>
<p>另启命令提示符,运行<strong>php test.php</strong> 命令<br>示例脚本test.php:</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_638191" class="syntaxhighlighterphp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
<div class="line number61 index60 alt2">61</div>
<div class="line number62 index61 alt1">62</div>
<div class="line number63 index62 alt2">63</div>
<div class="line number64 index63 alt1">64</div>
<div class="line number65 index64 alt2">65</div>
<div class="line number66 index65 alt1">66</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php plain"><?php</code></div>
<div class="line number2 index1 alt1"><code class="php keyword">namespace</code> <code class="php plain">Facebook\WebDriver;</code></div>
<div class="line number3 index2 alt2"><code class="php keyword">use</code> <code class="php plain">Facebook\WebDriver\Remote\DesiredCapabilities;</code></div>
<div class="line number4 index3 alt1"><code class="php keyword">use</code> <code class="php plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></div>
<div class="line number5 index4 alt2"><code class="php keyword">require_once</code><code class="php plain">(</code><code class="php string">'vendor/autoload.php'</code><code class="php plain">);</code></div>
<div class="line number6 index5 alt1"> </div>
<div class="line number7 index6 alt2"><code class="php plain">header(</code><code class="php string">"Content-Type: text/html; charset=UTF-8"</code><code class="php plain">);</code></div>
<div class="line number8 index7 alt1"><code class="php comments">// start Firefox with 5 second timeout</code></div>
<div class="line number9 index8 alt2"><code class="php variable">$waitSeconds</code> <code class="php plain">= 15; </code><code class="php comments">//需等待加载的时间,一般加载时间在0-15秒,如果超过15秒,报错。</code></div>
<div class="line number10 index9 alt1"><code class="php variable">$host</code> <code class="php plain">= </code><code class="php string">'http://localhost:4444/wd/hub'</code><code class="php plain">; // this is the </code><code class="php keyword">default</code></div>
<div class="line number11 index10 alt2"><code class="php comments">//这里使用的是chrome浏览器进行测试,需到http://www.seleniumhq.org/download/上下载对应的浏览器测试插件</code></div>
<div class="line number12 index11 alt1"><code class="php comments">//我这里下载的是win32 Google Chrome Driver 2.25版:https://chromedriver.storage.googleapis.com/index.html?path=2.25/</code></div>
<div class="line number13 index12 alt2"><code class="php variable">$capabilities</code> <code class="php plain">= DesiredCapabilities::chrome();</code></div>
<div class="line number14 index13 alt1"><code class="php variable">$driver</code> <code class="php plain">= RemoteWebDriver::create(</code><code class="php variable">$host</code><code class="php plain">, </code><code class="php variable">$capabilities</code><code class="php plain">, 5000);</code></div>
<div class="line number15 index14 alt2"><code class="php comments">// navigate to 'http://docs.seleniumhq.org/'</code></div>
<div class="line number16 index15 alt1"><code class="php variable">$driver</code><code class="php plain">->get(</code><code class="php string">'https://www.baidu.com/'</code><code class="php plain">);</code></div>
<div class="line number17 index16 alt2"> </div>
<div class="line number18 index17 alt1"><code class="php functions">echo</code> <code class="php plain">iconv(</code><code class="php string">"UTF-8"</code><code class="php plain">,</code><code class="php string">"GB2312"</code><code class="php plain">,</code><code class="php string">'标题1'</code><code class="php plain">).</code><code class="php string">":"</code> <code class="php plain">. </code><code class="php variable">$driver</code><code class="php plain">->getTitle() . </code><code class="php string">"\n"</code><code class="php plain">; </code><code class="php comments">//cmd.exe中文乱码,所以需转码</code></div>
<div class="line number19 index18 alt2"> </div>
<div class="line number20 index19 alt1"><code class="php variable">$driver</code><code class="php plain">->findElement(WebDriverBy::id(</code><code class="php string">'kw'</code><code class="php plain">))->sendKeys(</code><code class="php string">'wwe'</code><code class="php plain">)->submit();</code></div>
<div class="line number21 index20 alt2"> </div>
<div class="line number22 index21 alt1"><code class="php comments">// 等待新的页面加载完成....</code></div>
<div class="line number23 index22 alt2"><code class="php variable">$driver</code><code class="php plain">->wait(</code><code class="php variable">$waitSeconds</code><code class="php plain">)->until(</code></div>
<div class="line number24 index23 alt1"><code class="php spaces"> </code><code class="php plain">WebDriverExpectedCondition::visibilityOfElementLocated(</code></div>
<div class="line number25 index24 alt2"><code class="php spaces"> </code><code class="php plain">WebDriverBy::partialLinkText(</code><code class="php string">'100shuai'</code><code class="php plain">)</code></div>
<div class="line number26 index25 alt1"><code class="php spaces"> </code><code class="php plain">)</code></div>
<div class="line number27 index26 alt2"><code class="php plain">);</code></div>
<div class="line number28 index27 alt1"><code class="php variable">$driver</code><code class="php plain">->findElement(WebDriverBy::partialLinkText(</code><code class="php string">'100shuai'</code><code class="php plain">))->sendKeys(</code><code class="php string">'xxx'</code><code class="php plain">)->click(); </code><code class="php comments">//一般点击链接的时候,担心因为失去焦点而抛异常,则可以先调用一下sendKeys,再click</code></div>
<div class="line number29 index28 alt2"> </div>
<div class="line number30 index29 alt1"> </div>
<div class="line number31 index30 alt2"><code class="php plain">switchToEndWindow(</code><code class="php variable">$driver</code><code class="php plain">); </code><code class="php comments">//切换至最后一个window</code></div>
<div class="line number32 index31 alt1"> </div>
<div class="line number33 index32 alt2"><code class="php comments">// 等待加载....</code></div>
<div class="line number34 index33 alt1"><code class="php variable">$driver</code><code class="php plain">->wait(</code><code class="php variable">$waitSeconds</code><code class="php plain">)->until(</code></div>
<div class="line number35 index34 alt2"><code class="php spaces"> </code><code class="php plain">WebDriverExpectedCondition::visibilityOfElementLocated(</code></div>
<div class="line number36 index35 alt1"><code class="php spaces"> </code><code class="php plain">WebDriverBy::partialLinkText(</code><code class="php string">'SmackDown收视率创历史新低'</code><code class="php plain">)</code></div>
<div class="line number37 index36 alt2"><code class="php spaces"> </code><code class="php plain">)</code></div>
<div class="line number38 index37 alt1"><code class="php plain">);</code></div>
<div class="line number39 index38 alt2"><code class="php functions">echo</code> <code class="php plain">iconv(</code><code class="php string">"UTF-8"</code><code class="php plain">,</code><code class="php string">"GB2312"</code><code class="php plain">,</code><code class="php string">'标题2'</code><code class="php plain">).</code><code class="php string">":"</code> <code class="php plain">. </code><code class="php variable">$driver</code><code class="php plain">->getTitle() . </code><code class="php string">"\n"</code><code class="php plain">; </code><code class="php comments">//cmd.exe中文乱码,所以需转码</code></div>
<div class="line number40 index39 alt1"> </div>
<div class="line number41 index40 alt2"><code class="php variable">$driver</code><code class="php plain">->findElement(WebDriverBy::partialLinkText(</code><code class="php string">'SmackDown收视率创历史新低'</code><code class="php plain">))->click();</code></div>
<div class="line number42 index41 alt1"> </div>
<div class="line number43 index42 alt2"><code class="php plain">switchToEndWindow(</code><code class="php variable">$driver</code><code class="php plain">); </code><code class="php comments">//切换至最后一个window</code></div>
<div class="line number44 index43 alt1"> </div>
<div class="line number45 index44 alt2"> </div>
<div class="line number46 index45 alt1"><code class="php comments">// 等待加载....</code></div>
<div class="line number47 index46 alt2"><code class="php variable">$driver</code><code class="php plain">->wait(</code><code class="php variable">$waitSeconds</code><code class="php plain">)->until(</code></div>
<div class="line number48 index47 alt1"><code class="php spaces"> </code><code class="php plain">WebDriverExpectedCondition::titleContains(</code><code class="php string">'SmackDown收视率创历史新低'</code><code class="php plain">)</code></div>
<div class="line number49 index48 alt2"><code class="php plain">);</code></div>
<div class="line number50 index49 alt1"><code class="php functions">echo</code> <code class="php plain">iconv(</code><code class="php string">"UTF-8"</code><code class="php plain">,</code><code class="php string">"GB2312"</code><code class="php plain">,</code><code class="php string">'标题3'</code><code class="php plain">).</code><code class="php string">":"</code> <code class="php plain">. </code><code class="php variable">$driver</code><code class="php plain">->getTitle() . </code><code class="php string">"\n"</code><code class="php plain">; </code><code class="php comments">//cmd.exe中文乱码,所以需转码</code></div>
<div class="line number51 index50 alt2"> </div>
<div class="line number52 index51 alt1"> </div>
<div class="line number53 index52 alt2"><code class="php comments">//关闭浏览器</code></div>
<div class="line number54 index53 alt1"><code class="php variable">$driver</code><code class="php plain">->quit();</code></div>
<div class="line number55 index54 alt2"> </div>
<div class="line number56 index55 alt1"><code class="php comments">//切换至最后一个window</code></div>
<div class="line number57 index56 alt2"><code class="php comments">//因为有些网站的链接点击过去带有target="_blank"属性,就新开了一个TAB,而selenium还是定位到老的TAB上,如果要实时定位到新的TAB,则需要调用此方法,切换到最后一个window</code></div>
<div class="line number58 index57 alt1"><code class="php keyword">function</code> <code class="php plain">switchToEndWindow(</code><code class="php variable">$driver</code><code class="php plain">){</code></div>
<div class="line number59 index58 alt2"><code class="php spaces"> </code> </div>
<div class="line number60 index59 alt1"><code class="php spaces"> </code><code class="php variable">$arr</code> <code class="php plain">= </code><code class="php variable">$driver</code><code class="php plain">->getWindowHandles();</code></div>
<div class="line number61 index60 alt2"><code class="php spaces"> </code><code class="php keyword">foreach</code> <code class="php plain">(</code><code class="php variable">$arr</code> <code class="php keyword">as</code> <code class="php variable">$k</code><code class="php plain">=></code><code class="php variable">$v</code><code class="php plain">){</code></div>
<div class="line number62 index61 alt1"><code class="php spaces"> </code><code class="php keyword">if</code><code class="php plain">(</code><code class="php variable">$k</code> <code class="php plain">== (</code><code class="php functions">count</code><code class="php plain">(</code><code class="php variable">$arr</code><code class="php plain">)-1)){</code></div>
<div class="line number63 index62 alt2"><code class="php spaces"> </code><code class="php variable">$driver</code><code class="php plain">->switchTo()->window(</code><code class="php variable">$v</code><code class="php plain">);</code></div>
<div class="line number64 index63 alt1"><code class="php spaces"> </code><code class="php plain">}</code></div>
<div class="line number65 index64 alt2"><code class="php spaces"> </code><code class="php plain">}</code></div>
<div class="line number66 index65 alt1"><code class="php plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> </p>
<h1>元素定位</h1>
<h4>1. WebDriverBy::id()</h4>
<blockquote class="default">
<p>通过ID属性定位元素</p>
<div id="highlighter_116429" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush comments">//<input id="kw" name="wd" class="s_ipt" maxlength="255" autocomplete="off" /></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome(), 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>7</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'kw'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>8</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>2. WebDriverBy::name()</h4>
<blockquote class="default">
<p>通过name属性定位元素。如果查找多个,则使用findElements进行定位</p>
<div id="highlighter_224495" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush comments">//<input id="kw" name="wd" class="s_ipt" maxlength="255" autocomplete="off" /></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome(), 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::name(</code><code class="Brush string">'wd'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush keyword">foreach</code><code class="Brush plain">(</code><code class="Brush variable">$elements</code> <code class="Brush keyword">as</code> <code class="Brush variable">$elem</code><code class="Brush plain">){ </code><code class="Brush comments">//有时候多个元素时,想找出某个特定元素,可根据attribute或text进行判断过滤</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush functions">echo</code> <code class="Brush variable">$elem</code><code class="Brush plain">->getAttribute(</code><code class="Brush string">'type'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush functions">echo</code> <code class="Brush variable">$elem</code><code class="Brush plain">-></code><code class="Brush functions">getText</code><code class="Brush plain">();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>3. WebDriverBy::tagName()</h4>
<blockquote class="default">
<p>通过标签进行定位元素。如果查找多个,则使用findElements进行定位,具体参考WebDriverBy::name()的代码</p>
<div id="highlighter_554246" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush comments">//<input type="hidden" name="rsv_bp" value="0" /></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush comments">//<input id="kw" name="wd" class="s_ipt" maxlength="255" autocomplete="off" /></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush comments">//.....</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome(), 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::tagName(</code><code class="Brush string">'input'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>4. WebDriverBy::className()</h4>
<blockquote class="default">
<p>通过css类进行定位元素。如果查找多个,则使用findElements进行定位,具体参考WebDriverBy::name()的代码</p>
<div id="highlighter_83402" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush comments">//<input id="kw" name="wd" class="s_ipt" maxlength="255" autocomplete="off" /></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome(), 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>7</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::className(</code><code class="Brush string">'s_ipt'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>8</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>5. WebDriverBy::linkText()</h4>
<blockquote class="default">
<p>通过超文本链接上的文字信息来定位元素。如果查找多个,则使用findElements进行定位,具体参考WebDriverBy::name()的代码</p>
<div id="highlighter_356820" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush comments">//<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome(), 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>7</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::linkText(</code><code class="Brush string">'新闻'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>8</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>6. WebDriverBy::partialLinkText()</h4>
<blockquote class="default">
<p>这个方法是上一个方法的扩展。当你不能准确知道超链接上的文本信息或者只想通过一些关键字进行匹配时,可以使用这个方法来通过部分链接文字进行匹配。如果查找多个,则使用findElements进行定位,具体参考WebDriverBy::name()的代码</p>
<div id="highlighter_378785" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush comments">//<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome(), 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>7</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::partialLinkText(</code><code class="Brush string">'新'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>8</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>7. WebDriverBy::xpath()</h4>
<blockquote class="default">
<p>这个方法是非常强大的元素查找方式,使用这种方法几乎可以定位到页面上的任意元素。在正式开始使用XPath进行定位前,我们先了解下什么是XPath。XPath是XML Path的简称,由于HTML文档本身就是一个标准的XML页面,所以我们可以使用XPath的语法来定位页面元素。更多详细的定位资料,参考页脚链接地址。</p>
</blockquote>
<p>XPath语法如下:</p>
<div id="highlighter_514567" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::xpath(</code><code class="Brush string">"//*[@id='J_login_form']/dl/dt/input[@id='J_password']"</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h4>8. WebDriverBy::cssSelector()</h4>
<blockquote class="default">
<p>cssSelector这种元素定位方式跟xpath比较类似,但执行速度较快,而且各种浏览器对它的支持都相当到位,所以功能比较强大。<br>下面是一些常见的cssSelector的定位方式:<br>定位id为flrs的div元素,可以写成:#flrs 注:相当于xpath语法的//div[@id=’flrs’]<br>定位id为flrs下的a元素,可以写成 #flrs > a 注:相当于xpath语法的//div[@id=’flrs’]/a<br>定位id为flrs下的href属性值为/forexample/about.html的元素,可以写成: #flrs > a<br>如果需要指定多个属性值时,可以逐一加在后面,如#flrs > input。</p>
</blockquote>
<p>明白基本语法后,我们来尝试用cssSelector方式来层级关系定位,代码如下:</p>
<div id="highlighter_11585" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush comments">//<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::cssSelector(</code><code class="Brush string">"#J_login_form>dl>dt>input"</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>cssSelector还有一个用处是定位使用了复合样式表的元素,之前在第4种方式className里面提到过。现在我们就来看看如何通过cssSelector来引用到第4种方式中提到的那个button。button代码如下:</p>
<div id="highlighter_937585" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush comments">//<button id="J_sidebar_login" class="btn btn_big btn_submit" type="submit">登录</button></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::cssSelector(</code><code class="Brush string">"button.btn.btn_big.btn_submit"</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>此外,cssSelector还有一些高级用法,如果熟练后可以更加方便地帮助我们定位元素,如我们可以利用^用于匹配一个前缀,$用于匹配一个后缀,*用于匹配任意字符。例如:</p>
<blockquote class="default">
<p>匹配一个有id属性,并且id属性是以”id_prefix_”开头的超链接元素:a<br>匹配一个有id属性,并且id属性是以”_id_sufix”结尾的超链接元素:a<br>匹配一个有id属性,并且id属性中包含”id_pattern”字符的超链接元素:a</p>
</blockquote>
<h4>9. 判断定位的元素是否存在</h4>
<blockquote class="default">
<p>selenium找元素时,如果超出timeout时间后,还未找到元素,则会报异常,我们则可以利用这样的方式进行判断元素是否存在。不过这种方式对于及时性要求不高的情况下使用,如果要求及时性的话,建议还是获取到page source后,用htmlparser或正则判断即可。</p>
<div id="highlighter_341238" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">if</code><code class="Brush plain">(isElementExsit(</code><code class="Brush variable">$driver</code><code class="Brush plain">, WebDriverBy::linkText(</code><code class="Brush string">'新闻'</code><code class="Brush plain">))){</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush functions">echo</code> <code class="Brush string">'找到元素啦'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush plain">}</code><code class="Brush keyword">else</code><code class="Brush plain">{</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush functions">echo</code> <code class="Brush string">'没有找到元素'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="Brush comments">/**</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">* 判断元素是否存在</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">* @param WebDriver $driver</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">* @param WebDriverBy $locator</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">*/</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"><code class="Brush keyword">function</code> <code class="Brush plain">isElementExsit(</code><code class="Brush variable">$driver</code><code class="Brush plain">,</code><code class="Brush variable">$locator</code><code class="Brush plain">){</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush keyword">try</code> <code class="Brush plain">{</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$nextbtn</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(</code><code class="Brush variable">$locator</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush keyword">return</code> <code class="Brush plain">true;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">} </code><code class="Brush keyword">catch</code> <code class="Brush plain">(\Exception </code><code class="Brush variable">$e</code><code class="Brush plain">) {</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush functions">echo</code> <code class="Brush string">'element is not found!'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush keyword">return</code> <code class="Brush plain">false;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>21</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>22</code></td>
<td class="content"><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>23</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h1> </h1>
<h1>元素操作</h1>
<div class="article-body kancloud-markdown-body">
<h4>1.输入框</h4>
<div id="highlighter_968129" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'wd'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$element</code><code class="Brush plain">->sendKeys(</code><code class="Brush string">"wwe"</code><code class="Brush plain">); </code><code class="Brush comments">//在输入框中输入内容</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="Brush variable">$element</code><code class="Brush plain">->clear(); </code><code class="Brush comments">//将输入框清空</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush variable">$element</code><code class="Brush plain">->getAttribute(</code><code class="Brush string">'value'</code><code class="Brush plain">); </code><code class="Brush comments">//获取输入框的文本内容</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h4>2.单选框</h4>
<div id="highlighter_530688" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$radio</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'BookMode'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$radio</code><code class="Brush plain">->click(); </code><code class="Brush comments">//选择某个单选项</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="Brush variable">$radio</code><code class="Brush plain">->isSelected(); </code><code class="Brush comments">//判断某个单选项是否已经被选择</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h4>3.多选框</h4>
<div id="highlighter_20457" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$checkbox</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'myCheckbox'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$checkbox</code><code class="Brush plain">->click(); </code><code class="Brush comments">//选择某选项</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="Brush variable">$checkbox</code><code class="Brush plain">->isSelected(); </code><code class="Brush comments">//判断该选项是否已经被选择</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush variable">$checkbox</code><code class="Brush plain">->isEnabled(); </code><code class="Brush comments">//判断是否enable</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h4>4.下拉框</h4>
<blockquote class="default">
<p>下拉框是我们最常见的一种页面元素,对于一般的元素,我们只需要一次就定位,但下拉框里的内容需要进行两次定位,先定位到下拉框,再定位到下拉框内里的选项。</p>
<div id="highlighter_165535" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$select</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'myselect'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$select</code><code class="Brush plain">->findElement(WebDriverBy::xpath(</code><code class="Brush string">"//option[@value='100']"</code><code class="Brush plain">))->click(); //找到值为100的选项进行选中</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>5.按钮</h4>
<div id="highlighter_329771" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$btn</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'btn'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$btn</code><code class="Brush plain">->click(); </code><code class="Brush comments">//点击按钮</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="Brush variable">$btn</code><code class="Brush plain">->isEnabled(); </code><code class="Brush comments">//判断是否enable</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h4>6.文件上传</h4>
<div id="highlighter_809221" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$upload</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'img-upload'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$filePath</code> <code class="Brush plain">= </code><code class="Brush string">"C:\test\\uploadfile\\media_ads\\test.jpg"</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="Brush variable">$upload</code><code class="Brush plain">->sendKeys(</code><code class="Brush variable">$filePath</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h4>7.指定元素点击</h4>
<blockquote class="default">
<p>因为有时候因为种种原因(如元素上有蒙版层或者因为一些浮动的div导致坐标变化或者不可点击),而不能使用$ele.click()时,采用通用的方式,就是用JS执行点击事件。而且点击事件是可被监听的,可在元素上写onclick事件进行监听。</p>
<div id="highlighter_457147" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush comments">//用webdriver获取对象,再进行JS操作</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush variable">$ele</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'haha'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->executeScript(</code><code class="Brush string">"arguments.click();"</code><code class="Brush plain">,[</code><code class="Brush variable">$ele</code><code class="Brush plain">]);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush comments">//用JS获取对象进行操作</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"><code class="Brush variable">$js</code> <code class="Brush plain">= <<<js</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush keyword">var</code> <code class="Brush plain">ele = document.getElementById(</code><code class="Brush string">'haha'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush plain">ele.click();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="Brush plain">js;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->executeScript(</code><code class="Brush variable">$js</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>8.滚动到指定元素</h4>
<blockquote class="default">
<p>用JS的方式滚动到指定的元素。</p>
<div id="highlighter_705493" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$ele</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'haha2'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->executeScript(</code><code class="Brush string">"arguments.scrollIntoView();"</code><code class="Brush plain">,[</code><code class="Brush variable">$ele</code><code class="Brush plain">]);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>9.移动到指定元素</h4>
<blockquote class="default">
<p>移动的时候,鼠标不会真正移动,但实际上已移动,这个可以在haha2元素上写一个onmouseover事件进行监听即可测试。</p>
<div id="highlighter_472657" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$ele</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'haha2'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->getMouse()->mouseMove(</code><code class="Brush variable">$ele</code><code class="Brush plain">->getCoordinates());</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
</div>
<h1> </h1>
<h1>元素等待</h1>
<h4> </h4>
<h4>明确的等待</h4>
<blockquote class="default">
<p>明确的等待是指在代码进行下一步操作之前等待某一个条件的发生。最不好的情况是使用sleep()去设置一段确认的时间去等待。但为什么说最不好呢?因为一个元素的加载时间有长有短,你在设置sleep的时间之前要自己把握长短,太短容易超时,太长浪费时间。selenium webdriver提供了一些方法帮助我们等待正好需要等待的时间,比如以下例子中我们设置的最长等待时间为15秒。</p>
</blockquote>
<div id="highlighter_527026" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush keyword">namespace</code> <code class="Brush plain">Facebook\WebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\DesiredCapabilities;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush keyword">require_once</code><code class="Brush plain">(</code><code class="Brush string">'vendor/autoload.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush plain">header(</code><code class="Brush string">"Content-Type: text/html; charset=UTF-8"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush comments">// start Firefox with 5 second timeout</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush variable">$waitSeconds</code> <code class="Brush plain">= 15; </code><code class="Brush comments">//需等待加载的时间,一般加载时间在0-15秒,如果超过15秒,报错。</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::chrome();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"><code class="Brush comments">//由于下拉框是通过点击“搜索设置”按钮触发JS动态生成的DOM,所以这里使用Wait for new element to appear方式,不然直接调用查找元素会报错,说找不到元素</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->wait(</code><code class="Brush variable">$waitSeconds</code><code class="Brush plain">)->until(</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">WebDriverExpectedCondition::visibilityOfElementLocated(</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">WebDriverBy::id(</code><code class="Brush string">'kw'</code><code class="Brush plain">)</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">)</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>21</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'kw'</code><code class="Brush plain">))->sendKeys(</code><code class="Brush string">'wwe'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>22</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done!'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>23</code></td>
<td class="content"><code class="Brush comments">//关闭浏览器</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>24</code></td>
<td class="content"><code class="Brush comments">//$driver->quit();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>25</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>26</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h4> </h4>
<h4>隐性等待</h4>
<blockquote class="default">
<p>隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间。默认值是0,但是设置之后,这个时间将在WebDriver对象实例整个生命周期都起作用。上面的代码就变成了这样:</p>
</blockquote>
<div id="highlighter_294396" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush keyword">namespace</code> <code class="Brush plain">Facebook\WebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\DesiredCapabilities;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush keyword">require_once</code><code class="Brush plain">(</code><code class="Brush string">'vendor/autoload.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush plain">header(</code><code class="Brush string">"Content-Type: text/html; charset=UTF-8"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush comments">// start Firefox with 5 second timeout</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::chrome();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->manage()->timeouts()->implicitlyWait(15); </code><code class="Brush comments">//隐性设置15秒</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'kw'</code><code class="Brush plain">))->sendKeys(</code><code class="Brush string">'wwe'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done!'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="Brush comments">//关闭浏览器</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"><code class="Brush comments">//$driver->quit();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>21</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h1> </h1>
<h1>JS调用</h1>
<div class="right tools">
<div class="ui top right pointing dropdown item">
<div id="highlighter_838045" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush keyword">namespace</code> <code class="Brush plain">Facebook\WebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\DesiredCapabilities;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush keyword">require_once</code><code class="Brush plain">(</code><code class="Brush string">'vendor/autoload.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush plain">header(</code><code class="Brush string">"Content-Type: text/html; charset=UTF-8"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush comments">// start Firefox with 5 second timeout</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::chrome();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::className(</code><code class="Brush string">'s_ipt'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="Brush variable">$js</code> <code class="Brush plain">= <<<js</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">document.getElementById(</code><code class="Brush string">"kw"</code><code class="Brush plain">).style.border = </code><code class="Brush string">'2px solid red'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush keyword">var</code> <code class="Brush plain">button = document.getElementById(</code><code class="Brush string">"su"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>21</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">button.setAttribute(</code><code class="Brush string">'type'</code><code class="Brush plain">,</code><code class="Brush string">'button'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>22</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">button.setAttribute(</code><code class="Brush string">'onclick'</code><code class="Brush plain">,</code><code class="Brush string">'document.getElementById("kw").style.border = "2px solid blue";alert("hello,dear wangkun!");'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>23</code></td>
<td class="content"><code class="Brush plain">js;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>24</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->executeScript(</code><code class="Brush variable">$js</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>25</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done!'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>26</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>27</code></td>
<td class="content"><code class="Brush comments">//关闭浏览器</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>28</code></td>
<td class="content"><code class="Brush comments">//$driver->quit();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>29</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>30</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h1> </h1>
<h1>验证码识别</h1>
<blockquote class="default">
<p>有些网站打开后,有验证码需要填写,而我们又不能直接获取该验证码的远程地址,然后下载,这样的话就相当于又请求了一次,那么验证码又被更新了,就达不到我们识别验证码的效果。<br>而我们的方案是通过网页截图,然后找到验证码的具体位置,然后再截图方式把验证码图片获取到。废话不多说,直接开始!</p>
</blockquote>
<h4>示例脚本:</h4>
<div id="highlighter_510523" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush keyword">namespace</code> <code class="Brush plain">Facebook\WebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\DesiredCapabilities;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush keyword">require_once</code><code class="Brush plain">(</code><code class="Brush string">'vendor/autoload.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush plain">header(</code><code class="Brush string">"Content-Type: text/html; charset=UTF-8"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush keyword">const</code> <code class="Brush plain">vcodeDst = </code><code class="Brush string">'f://vcode.png'</code><code class="Brush plain">; //验证码存放地址</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush comments">// start Firefox with 5 second timeout</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::chrome();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'http://www.yimuhe.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->manage()->window()->maximize(); </code><code class="Brush comments">//将浏览器最大化</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->takeScreenshot(vcodeDst); </code><code class="Brush comments">//截取当前网页,该网页有我们需要的验证码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'vcode_img'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"><code class="Brush plain">generateVcodeIMG(</code><code class="Brush variable">$element</code><code class="Brush plain">->getLocation(), </code><code class="Brush variable">$element</code><code class="Brush plain">->getSize(),vcodeDst);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>21</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done!'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>22</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>23</code></td>
<td class="content"><code class="Brush comments">//关闭浏览器</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>24</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->quit();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>25</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>26</code></td>
<td class="content"><code class="Brush comments">/**</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>27</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">* 生成验证码图片</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>28</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">* @param $location 验证码x,y轴坐标</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>29</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">* @param $size 验证码的长宽</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>30</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">*/</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>31</code></td>
<td class="content"><code class="Brush keyword">function</code> <code class="Brush plain">generateVcodeIMG(</code><code class="Brush variable">$location</code><code class="Brush plain">,</code><code class="Brush variable">$size</code><code class="Brush plain">,</code><code class="Brush variable">$src_img</code><code class="Brush plain">){</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>32</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$width</code> <code class="Brush plain">= </code><code class="Brush variable">$size</code><code class="Brush plain">->getWidth();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>33</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$height</code> <code class="Brush plain">= </code><code class="Brush variable">$size</code><code class="Brush plain">->getHeight();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>34</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$x</code> <code class="Brush plain">= </code><code class="Brush variable">$location</code><code class="Brush plain">->getX();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>35</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$y</code> <code class="Brush plain">= </code><code class="Brush variable">$location</code><code class="Brush plain">->getY();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>36</code></td>
<td class="content"><code class="spaces"> </code> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>37</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$src</code> <code class="Brush plain">= imagecreatefrompng(</code><code class="Brush variable">$src_img</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>38</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$dst</code> <code class="Brush plain">= imagecreatetruecolor(</code><code class="Brush variable">$width</code><code class="Brush plain">,</code><code class="Brush variable">$height</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>39</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">imagecopyresampled(</code><code class="Brush variable">$dst</code><code class="Brush plain">,</code><code class="Brush variable">$src</code><code class="Brush plain">,0,0,</code><code class="Brush variable">$x</code><code class="Brush plain">,</code><code class="Brush variable">$y</code><code class="Brush plain">,</code><code class="Brush variable">$width</code><code class="Brush plain">,</code><code class="Brush variable">$height</code><code class="Brush plain">,</code><code class="Brush variable">$width</code><code class="Brush plain">,</code><code class="Brush variable">$height</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>40</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">imagejpeg(</code><code class="Brush variable">$dst</code><code class="Brush plain">,</code><code class="Brush variable">$src_img</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>41</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush functions">chmod</code><code class="Brush plain">(</code><code class="Brush variable">$src_img</code><code class="Brush plain">,0777);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>42</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">imagedestroy(</code><code class="Brush variable">$src</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>43</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">imagedestroy(</code><code class="Brush variable">$dst</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>44</code></td>
<td class="content"><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>45</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>备注:当我们已经把正确的验证码图片下载到了本地后,不管是用自己写的OCR程序进行识别还是用第三方程序进行识别都可以,这个就比较简单了,就不在这里进行陈述。<br>这里推荐一个比较准确的第三方验证码识别的程序,集成一下就可以了。<br>https://www.juhe.cn/docs/api/id/60/aid/344</p>
</div>
</div>
<h1> </h1>
<h1>frame与弹窗的控制</h1>
<div class="right tools"> </div>
<p>对于web应用,经常会出现框架(frame) 或窗口(window)的应用,这也就给我们的定位带来了一个难题。有时候我们定位一个元素,定位器没有问题,但一直定位不了,这时候就要检查这个元素是否在一个frame中,seelnium webdriver 提供了这样的方法,可以很轻松的来解决这个问题。</p>
<ul>
<li>$driver->switchTo()->frame(“id”)</li>
<li>$driver->switchTo()->window(“id”)</li>
<li>$driver->switchTo()->alert()</li>
</ul>
<p> </p>
<h4>frame示例脚本</h4>
<div id="highlighter_136458" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush keyword">namespace</code> <code class="Brush plain">Facebook\WebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\DesiredCapabilities;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush keyword">require_once</code><code class="Brush plain">(</code><code class="Brush string">'vendor/autoload.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush plain">header(</code><code class="Brush string">"Content-Type: text/html; charset=UTF-8"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush comments">// start Firefox with 5 second timeout</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::chrome();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->manage()->timeouts()->implicitlyWait(15); </code><code class="Brush comments">//隐性设置15秒</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://v.qq.com/x/cover/e7hi6lep1yc51ca.html?vid=h0018p9ihom'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush variable">$driver</code><code class="Brush plain">->getCurrentURL().</code><code class="Brush string">'\r\n'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"><code class="Brush comments">//将页面滚动条拖到底部</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>21</code></td>
<td class="content"><code class="Brush comments">//因为这个页面默认打开的时候,"评论区"的iframe没有渲染到DOM里,腾讯做的处理是拖动到底部的时候用JS动态渲染,所以我们需要控制浏览器滚动至底部</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>22</code></td>
<td class="content"><code class="Brush variable">$js</code> <code class="Brush plain">= </code><code class="Brush string">"window.scrollBy(0,100000000);"</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>23</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->executeScript(</code><code class="Brush variable">$js</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>24</code></td>
<td class="content"><code class="Brush plain">sleep(3);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>25</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>26</code></td>
<td class="content"><code class="Brush plain">#再找到其下面的 iframe(id=commentIframe)</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>27</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->switchTo()->frame(</code><code class="Brush string">"commentIframe"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>28</code></td>
<td class="content"><code class="Brush variable">$str</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->getPageSource();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>29</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>30</code></td>
<td class="content"><code class="Brush comments">//将获取到的影评数据保存再本地,再测试是否正确。</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>31</code></td>
<td class="content"><code class="Brush variable">$myfile</code> <code class="Brush plain">= </code><code class="Brush functions">fopen</code><code class="Brush plain">(</code><code class="Brush string">"d://newfile.html"</code><code class="Brush plain">, </code><code class="Brush string">"w"</code><code class="Brush plain">) </code><code class="Brush keyword">or</code> <code class="Brush keyword">die</code><code class="Brush plain">(</code><code class="Brush string">"Unable to open file!"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>32</code></td>
<td class="content"><code class="Brush plain">fwrite(</code><code class="Brush variable">$myfile</code><code class="Brush plain">, </code><code class="Brush variable">$str</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>33</code></td>
<td class="content"><code class="Brush plain">fclose(</code><code class="Brush variable">$myfile</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>34</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>35</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done!'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>36</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>37</code></td>
<td class="content"><code class="Brush comments">//关闭浏览器</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>38</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->quit();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>39</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>40</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h4>alert示例脚本</h4>
<div id="highlighter_113761" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush comments">//~~~以上代码省略...</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->switchTo()->alert()->accept(); </code><code class="Brush comments">//获取到confim alert,并且点击同意</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->switchTo()->alert()->dismiss(); </code><code class="Brush comments">//取消</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->switchTo()->alert()-></code><code class="Brush functions">getText</code><code class="Brush plain">(); </code><code class="Brush comments">//获取alert弹出的提示内容</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>我们以百度的页面为例来演示一下功能。<br>1.点击百度的设置<br>2.选择”每天显示多少条”的下拉框 (这个顺便把“元素操作”文章中的“select”元素章节也演示了)<br>3.点击保存设置按钮:会弹出一个alert弹窗<br>4.执行点击alert的确定按钮<br>5.试一下搜索的结果是否变化,操作完毕</p>
<div id="highlighter_770170" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush keyword">namespace</code> <code class="Brush plain">Facebook\WebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\DesiredCapabilities;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush keyword">require_once</code><code class="Brush plain">(</code><code class="Brush string">'vendor/autoload.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush plain">header(</code><code class="Brush string">"Content-Type: text/html; charset=UTF-8"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush comments">// start Firefox with 5 second timeout</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush variable">$waitSeconds</code> <code class="Brush plain">= 15; </code><code class="Brush comments">//需等待加载的时间,一般加载时间在0-15秒,如果超过15秒,报错。</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::chrome();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::linkText(</code><code class="Brush string">'设置'</code><code class="Brush plain">))->click();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::linkText(</code><code class="Brush string">'搜索设置'</code><code class="Brush plain">))->click();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>21</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>22</code></td>
<td class="content"><code class="Brush variable">$warpper</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'wrapper'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>23</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>24</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>25</code></td>
<td class="content"><code class="Brush comments">//由于下拉框是通过点击“搜索设置”按钮触发JS动态生成的DOM,所以这里使用Wait for new element to appear方式,不然直接调用查找元素会报错,说找不到元素</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>26</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->wait(</code><code class="Brush variable">$waitSeconds</code><code class="Brush plain">)->until(</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>27</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">WebDriverExpectedCondition::visibilityOfElementLocated(</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>28</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">WebDriverBy::id(</code><code class="Brush string">'nr'</code><code class="Brush plain">)</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>29</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">)</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>30</code></td>
<td class="content"><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>31</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>32</code></td>
<td class="content"><code class="Brush variable">$selectDom</code> <code class="Brush plain">= </code><code class="Brush variable">$warpper</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'nr'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>33</code></td>
<td class="content"><code class="Brush variable">$select</code> <code class="Brush plain">= </code><code class="Brush keyword">new</code> <code class="Brush plain">WebDriverSelect(</code><code class="Brush variable">$selectDom</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>34</code></td>
<td class="content"><code class="Brush variable">$select</code><code class="Brush plain">->selectByValue(10);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>35</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>36</code></td>
<td class="content"><code class="Brush comments">//由于下拉框是通过点击“搜索设置”按钮触发JS动态生成的DOM,所以这里使用Wait for new element to appear方式,不然直接调用查找元素会报错,说找不到元素</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>37</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->wait(</code><code class="Brush variable">$waitSeconds</code><code class="Brush plain">)->until(</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>38</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">WebDriverExpectedCondition::visibilityOfElementLocated(</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>39</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">WebDriverBy::linkText(</code><code class="Brush string">'保存设置'</code><code class="Brush plain">)</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>40</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">)</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>41</code></td>
<td class="content"><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>42</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>43</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::linkText(</code><code class="Brush string">'保存设置'</code><code class="Brush plain">))->click();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>44</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>45</code></td>
<td class="content"><code class="Brush plain">sleep(2);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>46</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>47</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->switchTo()->alert()->accept();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>48</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>49</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">"kw"</code><code class="Brush plain">))->sendKeys(</code><code class="Brush string">'wwe'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>50</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">"su"</code><code class="Brush plain">))->click();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>51</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>52</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done!'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>53</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>54</code></td>
<td class="content"><code class="Brush comments">//关闭浏览器</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>55</code></td>
<td class="content"><code class="Brush comments">//$driver->quit();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>56</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>57</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h4>window弹窗 示例脚本</h4>
<div id="highlighter_52299" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments">//$driver->switchTo()->window("id"),用法与 frame 相同。</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> </p>
<h1>AJAX分页数据获取</h1>
<div class="right tools">
<div class="ui top right pointing dropdown item">
<blockquote class="default">
<p>有时候有些列表页使用的是滚动条到最底部才加载下一页的数据,这个时候就需要用到selenium来操作这样的数据。我们拿letv的分页来做测试。</p>
</blockquote>
</div>
</div>
<div id="highlighter_598191" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush keyword">namespace</code> <code class="Brush plain">Facebook\WebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\DesiredCapabilities;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush keyword">require_once</code><code class="Brush plain">(</code><code class="Brush string">'vendor/autoload.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush plain">header(</code><code class="Brush string">"Content-Type: text/html; charset=UTF-8"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush comments">// start Firefox with 5 second timeout</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::chrome();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->manage()->timeouts()->implicitlyWait(15); </code><code class="Brush comments">//隐性设置15秒</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'http://list.le.com/listn/c1_t-1_a50071_y-1_s1_lg-1_ph-1_md_o4_d1_p.html'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"><code class="Brush comments">//翻一页</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"><code class="Brush plain">js = </code><code class="Brush string">"window.scrollTo(0,document.body.scrollHeight)"</code> <code class="Brush comments">//滚动至底部</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"><code class="Brush comments">//$js = "window.scrollBy(0,100000000);"; //也可以把值设大一点,达到底部的效果</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->executeScript(</code><code class="Brush variable">$js</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'sleep...'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>21</code></td>
<td class="content"><code class="Brush plain">sleep(6);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>22</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>23</code></td>
<td class="content"><code class="Brush comments">//再翻一页</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>24</code></td>
<td class="content"><code class="Brush plain">js = </code><code class="Brush string">"window.scrollTo(0,document.body.scrollHeight)"</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>25</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->executeScript(</code><code class="Brush variable">$js</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>26</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>27</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'sleep...'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>28</code></td>
<td class="content"><code class="Brush plain">sleep(6);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>29</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>30</code></td>
<td class="content"><code class="Brush comments">//再翻一页</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>31</code></td>
<td class="content"><code class="Brush plain">js = </code><code class="Brush string">"window.scrollTo(0,document.body.scrollHeight)"</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>32</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->executeScript(</code><code class="Brush variable">$js</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>33</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>34</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done!'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>35</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>36</code></td>
<td class="content"><code class="Brush comments">//关闭浏览器</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>37</code></td>
<td class="content"><code class="Brush comments">//$driver->quit();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>38</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>39</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h1> </h1>
<h1>PhantomJS</h1>
<blockquote class="default">
<p>用浏览器驱动的方式,很方便我们在测试阶段调试代码正确性,但是由于浏览器要启动,解析DOM、JS、下载图片等,使得程序跑起来的效率并不高,这个时候我们就需要用到Phantomjs,以后台的形式运行程序,大大的提升运行的性能。</p>
</blockquote>
<h4> </h4>
<h4>1.安装Phantomjs</h4>
<blockquote class="default">
<p>到http://phantomjs.org/download.html 上面去下载对应的版本,我这里下载的是windows版本的。将解压包中的phantomjs.exe放到PHP程序根目录,或将该exe加入到本机的环境变量中都行。</p>
</blockquote>
<h4> </h4>
<h4>2.使用Phantomjs</h4>
<blockquote class="default">
<p>拿的是“验证码识别”那篇文章的代码,只改了一处,$capabilities = DesiredCapabilities::phantomjs();这一行。<br>运行后,可以看到“验证码识别”程序不再启动chrome浏览器,而是后台执行,速度也快了很多。程序顺利跑出了我们想要的结果~ 大家可以休息一下咯~</p>
</blockquote>
<div id="highlighter_362595" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush keyword">namespace</code> <code class="Brush plain">Facebook\WebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\DesiredCapabilities;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush keyword">require_once</code><code class="Brush plain">(</code><code class="Brush string">'vendor/autoload.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush plain">header(</code><code class="Brush string">"Content-Type: text/html; charset=UTF-8"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush keyword">const</code> <code class="Brush plain">vcodeDst = </code><code class="Brush string">'f://vcode.png'</code><code class="Brush plain">; //验证码存放地址</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush comments">// start Firefox with 5 second timeout</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::phantomjs();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'http://www.yimuhe.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->manage()->window()->maximize(); </code><code class="Brush comments">//将浏览器最大化</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->takeScreenshot(vcodeDst); </code><code class="Brush comments">//截取当前网页,该网页有我们需要的验证码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'vcode_img'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"><code class="Brush plain">generateVcodeIMG(</code><code class="Brush variable">$element</code><code class="Brush plain">->getLocation(), </code><code class="Brush variable">$element</code><code class="Brush plain">->getSize(),vcodeDst);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>21</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done!'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>22</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>23</code></td>
<td class="content"><code class="Brush comments">//关闭浏览器</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>24</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->quit();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>25</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>26</code></td>
<td class="content"><code class="Brush comments">/**</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>27</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">* 生成验证码图片</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>28</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">* @param $location 验证码x,y轴坐标</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>29</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">* @param $size 验证码的长宽</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>30</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">*/</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>31</code></td>
<td class="content"><code class="Brush keyword">function</code> <code class="Brush plain">generateVcodeIMG(</code><code class="Brush variable">$location</code><code class="Brush plain">,</code><code class="Brush variable">$size</code><code class="Brush plain">,</code><code class="Brush variable">$src_img</code><code class="Brush plain">){</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>32</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$width</code> <code class="Brush plain">= </code><code class="Brush variable">$size</code><code class="Brush plain">->getWidth();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>33</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$height</code> <code class="Brush plain">= </code><code class="Brush variable">$size</code><code class="Brush plain">->getHeight();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>34</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$x</code> <code class="Brush plain">= </code><code class="Brush variable">$location</code><code class="Brush plain">->getX();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>35</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$y</code> <code class="Brush plain">= </code><code class="Brush variable">$location</code><code class="Brush plain">->getY();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>36</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>37</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$src</code> <code class="Brush plain">= imagecreatefrompng(</code><code class="Brush variable">$src_img</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>38</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$dst</code> <code class="Brush plain">= imagecreatetruecolor(</code><code class="Brush variable">$width</code><code class="Brush plain">,</code><code class="Brush variable">$height</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>39</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">imagecopyresampled(</code><code class="Brush variable">$dst</code><code class="Brush plain">,</code><code class="Brush variable">$src</code><code class="Brush plain">,0,0,</code><code class="Brush variable">$x</code><code class="Brush plain">,</code><code class="Brush variable">$y</code><code class="Brush plain">,</code><code class="Brush variable">$width</code><code class="Brush plain">,</code><code class="Brush variable">$height</code><code class="Brush plain">,</code><code class="Brush variable">$width</code><code class="Brush plain">,</code><code class="Brush variable">$height</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>40</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">imagejpeg(</code><code class="Brush variable">$dst</code><code class="Brush plain">,</code><code class="Brush variable">$src_img</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>41</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush functions">chmod</code><code class="Brush plain">(</code><code class="Brush variable">$src_img</code><code class="Brush plain">,0777);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>42</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">imagedestroy(</code><code class="Brush variable">$src</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>43</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">imagedestroy(</code><code class="Brush variable">$dst</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>44</code></td>
<td class="content"><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>45</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h1> </h1>
<h1>屏蔽图片</h1>
<div class="right tools">
<div class="ui top right pointing dropdown item">共有两种方法,一种设置chrome配置,一种直接使用插件达到相应的目的。其中使用插件来屏蔽图片可转到“使用扩展插件”章节。这里就介绍chrome配置。</div>
</div>
<h4> </h4>
<h4>1. 查看chrome支持的浏览器属性</h4>
<blockquote class="default">
<p>chrome driver的官方文档( https://sites.google.com/a/chromium.org/chromedriver/capabilities ),可以看到,chrome driver可以支持的自定义属性</p>
</blockquote>
<img class="size-full wp-image-12174 lazyload" title="php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver." alt="php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver." width="549" height="229" data-attachment-id="12174" data-permalink="http://justcode.ikeepstudying.com/2018/12/php-webdriver%ef%bc%9aphp%e6%8e%a7%e5%88%b6%e6%b5%8f%e8%a7%88%e5%99%a8%e5%8a%a8%e4%bd%9c-php-web%e9%a9%b1%e5%8a%a8-php%e5%ae%9e%e7%8e%b0%e8%87%aa%e5%8a%a8%e5%8c%96-php-webdriver-%e6%95%99%e7%a8%8b/eb40adb577ce8389c81f7b3c41eab85d_551x230/" data-orig-file="https://i0.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/eb40adb577ce8389c81f7b3c41eab85d_551x230.png?fit=551%2C230" data-orig-size="551,230" data-comments-opened="0" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver." data-image-description="" data-medium-file="https://i0.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/eb40adb577ce8389c81f7b3c41eab85d_551x230.png?fit=551%2C230" data-large-file="https://i0.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/eb40adb577ce8389c81f7b3c41eab85d_551x230.png?fit=551%2C230" data-src="https://i0.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/eb40adb577ce8389c81f7b3c41eab85d_551x230.png?resize=551%2C230">php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver.
<h4> </h4>
<h4>2. 查看本地配置的参数值</h4>
<blockquote class="default">
<p>可以使用自己的chrome浏览器进行配置,配置好了后,查看“Preferences文件”里的值就可以了。一般路径都为“用户文件夹\AppData\Local\Google\Chrome\User Data\Default”。</p>
</blockquote>
<img class="size-full wp-image-12175 lazyload" title="php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver." alt="php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver." width="558" height="316" data-attachment-id="12175" data-permalink="http://justcode.ikeepstudying.com/2018/12/php-webdriver%ef%bc%9aphp%e6%8e%a7%e5%88%b6%e6%b5%8f%e8%a7%88%e5%99%a8%e5%8a%a8%e4%bd%9c-php-web%e9%a9%b1%e5%8a%a8-php%e5%ae%9e%e7%8e%b0%e8%87%aa%e5%8a%a8%e5%8c%96-php-webdriver-%e6%95%99%e7%a8%8b/22d68dde1eb5af7b10ac7f74c6deea84_560x317/" data-orig-file="https://i0.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/22d68dde1eb5af7b10ac7f74c6deea84_560x317.png?fit=560%2C317" data-orig-size="560,317" data-comments-opened="0" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver." data-image-description="" data-medium-file="https://i0.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/22d68dde1eb5af7b10ac7f74c6deea84_560x317.png?fit=560%2C317" data-large-file="https://i0.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/22d68dde1eb5af7b10ac7f74c6deea84_560x317.png?fit=560%2C317" data-src="https://i0.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/22d68dde1eb5af7b10ac7f74c6deea84_560x317.png?resize=560%2C317">php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver.<img class="size-full wp-image-12176 lazyload" title="php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver." alt="php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver." width="391" height="300" data-attachment-id="12176" data-permalink="http://justcode.ikeepstudying.com/2018/12/php-webdriver%ef%bc%9aphp%e6%8e%a7%e5%88%b6%e6%b5%8f%e8%a7%88%e5%99%a8%e5%8a%a8%e4%bd%9c-php-web%e9%a9%b1%e5%8a%a8-php%e5%ae%9e%e7%8e%b0%e8%87%aa%e5%8a%a8%e5%8c%96-php-webdriver-%e6%95%99%e7%a8%8b/5eb17839b360dbe1aba71d5c4a7febef_393x302/" data-orig-file="https://i0.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/5eb17839b360dbe1aba71d5c4a7febef_393x302.png?fit=393%2C302" data-orig-size="393,302" data-comments-opened="0" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver." data-image-description="" data-medium-file="https://i0.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/5eb17839b360dbe1aba71d5c4a7febef_393x302.png?fit=393%2C302" data-large-file="https://i0.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/5eb17839b360dbe1aba71d5c4a7febef_393x302.png?fit=393%2C302" data-src="https://i0.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/5eb17839b360dbe1aba71d5c4a7febef_393x302.png?resize=393%2C302">php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver.<img class="size-full wp-image-12177 lazyload" title="php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver." alt="php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver." width="651" height="446" data-attachment-id="12177" data-permalink="http://justcode.ikeepstudying.com/2018/12/php-webdriver%ef%bc%9aphp%e6%8e%a7%e5%88%b6%e6%b5%8f%e8%a7%88%e5%99%a8%e5%8a%a8%e4%bd%9c-php-web%e9%a9%b1%e5%8a%a8-php%e5%ae%9e%e7%8e%b0%e8%87%aa%e5%8a%a8%e5%8c%96-php-webdriver-%e6%95%99%e7%a8%8b/2a49fb3fd6093c5d30082ae35268b114_653x447/" data-orig-file="https://i2.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/2a49fb3fd6093c5d30082ae35268b114_653x447.png?fit=653%2C447" data-orig-size="653,447" data-comments-opened="0" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver." data-image-description="" data-medium-file="https://i2.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/2a49fb3fd6093c5d30082ae35268b114_653x447.png?fit=653%2C447" data-large-file="https://i2.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/2a49fb3fd6093c5d30082ae35268b114_653x447.png?fit=653%2C447" data-src="https://i2.wp.com/justcode.ikeepstudying.com/wp-content/uploads/2018/12/2a49fb3fd6093c5d30082ae35268b114_653x447.png?resize=653%2C447">php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, A php client for webdriver.
<h4> </h4>
<h4>3. 代码DEMO</h4>
<blockquote class="default">
<p>找到了屏蔽图片对应的参数后,我们就可以进行测试了</p>
<div id="highlighter_922711" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::chrome();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush variable">$options</code> <code class="Brush plain">= </code><code class="Brush keyword">new</code> <code class="Brush plain">ChromeOptions();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush variable">$value</code> <code class="Brush plain">= [</code><code class="Brush string">'profile.managed_default_content_settings.images'</code><code class="Brush plain">=>2];</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush variable">$options</code><code class="Brush plain">->setExperimentalOption(</code><code class="Brush string">'prefs'</code><code class="Brush plain">, </code><code class="Brush variable">$value</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"><code class="Brush variable">$capabilities</code><code class="Brush plain">->setCapability(ChromeOptions::CAPABILITY, </code><code class="Brush variable">$options</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->manage()->timeouts()->implicitlyWait(15); </code><code class="Brush comments">//隐性设置15秒</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'http://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> </p>
</blockquote>
<h4>4. 换个思路,变得更简洁</h4>
<blockquote class="default">
<p>上面提到的都是设置具体的参数,而要找到对应设置的参数比较繁杂,当如果不想那么麻烦时候,完全可以在已有的chrome浏览器先设置好,然后把“用户文件夹\AppData\Local\Google\Chrome\User Data”加载到自己的应用中。</p>
<div id="highlighter_242535" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::chrome();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush variable">$options</code> <code class="Brush plain">= </code><code class="Brush keyword">new</code> <code class="Brush plain">ChromeOptions();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush variable">$options</code><code class="Brush plain">->addArguments([</code><code class="Brush string">"--user-data-dir=d:/xampp/test/User Data"</code><code class="Brush plain">]);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush variable">$capabilities</code><code class="Brush plain">->setCapability(ChromeOptions::CAPABILITY, </code><code class="Brush variable">$options</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->manage()->timeouts()->implicitlyWait(15); </code><code class="Brush comments">//隐性设置15秒</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'http://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> </p>
</blockquote>
<div class="article-body kancloud-markdown-body">
<blockquote class="default">
<p>总结:这里虽然只是介绍的屏蔽图片,但是同理的chrome其他设置也可以用这样的方式进行,如禁用JS等等之类的。</p>
</blockquote>
</div>
<div>
<h1> </h1>
<h1>使用扩展插件</h1>
<p>有时候我们需要使用浏览器的扩展插件来帮助我们达到某种特定的效果,比如“Block Image”插件可使得selenium使用过程中不显示图片,从而加快访问的速度和性能。再比如使用“adsafe”插件可使得访问网站的时候禁用相应的广告以及弹窗广告等。</p>
<p>这里我们使用”Block Image”插件的来展示下selenium怎么加载插件。这里使用的是chrome driver方式进行测试,其他浏览器的测试代码请自行百度。</p>
<p>1.下载Block Image插件</p>
<p>到http://www.cnplugins.com/ 上面搜索Block Image,下载下来,存放到自己的程序根目录。</p>
<p>2.代码测试</p>
<div id="highlighter_660218" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush keyword">namespace</code> <code class="Brush plain">Facebook\WebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\DesiredCapabilities;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Chrome\ChromeOptions;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"><code class="Brush keyword">require_once</code><code class="Brush plain">(</code><code class="Brush string">'vendor/autoload.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush plain">header(</code><code class="Brush string">"Content-Type: text/html; charset=UTF-8"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush comments">// start Firefox with 5 second timeout</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::chrome();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="Brush variable">$options</code> <code class="Brush plain">= </code><code class="Brush keyword">new</code> <code class="Brush plain">ChromeOptions();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"><code class="Brush variable">$options</code><code class="Brush plain">->addExtensions([</code><code class="Brush string">'Block-image.crx'</code><code class="Brush plain">]); </code><code class="Brush comments">//这一句则为加载我们下载好的插件</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"><code class="Brush variable">$capabilities</code><code class="Brush plain">->setCapability(ChromeOptions::CAPABILITY, </code><code class="Brush variable">$options</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 15000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->manage()->timeouts()->implicitlyWait(15); </code><code class="Brush comments">//隐性设置15秒</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'http://www.tudou.com/list/ach4a-2b-2c-2d-2e-2f1689g-2h-2i-2j-2k-2l-2m-2n-2sort1.html'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<h1> </h1>
<h1>代理设置</h1>
<div class="right tools">
<div class="ui top right pointing dropdown item">有时候我们需要修改浏览器的一些User Agent信息或代理IP,从而达到更好的兼容性测试。这里我们就用一个在线UserAgent分析工具进行测试。</div>
</div>
<h4>1.修改User Agent</h4>
<blockquote class="default">
<p>Chrome 示例<br>这里提供user-agent大全供参考http://www.cnblogs.com/hykun/p/Ua.html</p>
<div id="highlighter_489029" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush keyword">namespace</code> <code class="Brush plain">Facebook\WebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\DesiredCapabilities;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Chrome\ChromeOptions;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"><code class="Brush keyword">require_once</code><code class="Brush plain">(</code><code class="Brush string">'vendor/autoload.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush plain">header(</code><code class="Brush string">"Content-Type: text/html; charset=UTF-8"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush comments">// start Firefox with 5 second timeout</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::chrome();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="Brush variable">$useragent</code> <code class="Brush plain">= </code><code class="Brush string">'Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"><code class="Brush variable">$options</code> <code class="Brush plain">= </code><code class="Brush keyword">new</code> <code class="Brush plain">ChromeOptions();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"><code class="Brush variable">$options</code><code class="Brush plain">->addArguments([</code><code class="Brush string">"user-agent={$useragent}"</code><code class="Brush plain">]);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"><code class="Brush variable">$capabilities</code><code class="Brush plain">->setCapability(ChromeOptions::CAPABILITY, </code><code class="Brush variable">$options</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->manage()->timeouts()->implicitlyWait(15); </code><code class="Brush comments">//隐性设置15秒</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'http://www.atool.org/useragent.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>21</code></td>
<td class="content"><code class="Brush plain">var_dump(</code><code class="Brush variable">$capabilities</code><code class="Brush plain">->getCapability(ChromeOptions::CAPABILITY));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>22</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done!'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>23</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>24</code></td>
<td class="content"><code class="Brush comments">//关闭浏览器</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>25</code></td>
<td class="content"><code class="Brush comments">//$driver->quit();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>26</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<blockquote class="default">
<p>Phantomjs 示例</p>
<div id="highlighter_933089" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush keyword">namespace</code> <code class="Brush plain">Facebook\WebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\DesiredCapabilities;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Chrome\ChromeOptions;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"><code class="Brush keyword">require_once</code><code class="Brush plain">(</code><code class="Brush string">'vendor/autoload.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush plain">header(</code><code class="Brush string">"Content-Type: text/html; charset=UTF-8"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush comments">// start Firefox with 5 second timeout</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= DesiredCapabilities::phantomjs();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="Brush variable">$useragent</code> <code class="Brush plain">= </code><code class="Brush string">'Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"><code class="Brush variable">$capabilities</code><code class="Brush plain">->setCapability(</code><code class="Brush string">"phantomjs.page.settings.userAgent"</code><code class="Brush plain">, </code><code class="Brush variable">$useragent</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->manage()->timeouts()->implicitlyWait(15); </code><code class="Brush comments">//隐性设置15秒</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'http://www.atool.org/useragent.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'ua_code'</code><code class="Brush plain">))->getAttribute(</code><code class="Brush string">'value'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done!'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>21</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>22</code></td>
<td class="content"><code class="Brush comments">//关闭浏览器</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>23</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->quit();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>24</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> </p>
</blockquote>
<h4>2.修改代理IP</h4>
<div id="highlighter_708638" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush keyword">namespace</code> <code class="Brush plain">Facebook\WebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\RemoteWebDriver;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush keyword">use</code> <code class="Brush plain">Facebook\WebDriver\Remote\WebDriverCapabilityType;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush keyword">require_once</code><code class="Brush plain">(</code><code class="Brush string">'vendor/autoload.php'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush plain">header(</code><code class="Brush string">"Content-Type: text/html; charset=UTF-8"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush variable">$host</code> <code class="Brush plain">= </code><code class="Brush string">'http://localhost:4444/wd/hub'</code><code class="Brush plain">; // this is the </code><code class="Brush keyword">default</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="Brush variable">$ip</code> <code class="Brush plain">= </code><code class="Brush string">'115.225.2.3:8998'</code><code class="Brush plain">; </code><code class="Brush comments">//设置代理IP</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush variable">$capabilities</code> <code class="Brush plain">= </code><code class="Brush keyword">array</code><code class="Brush plain">(WebDriverCapabilityType::BROWSER_NAME => </code><code class="Brush string">'chrome'</code><code class="Brush plain">,</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">WebDriverCapabilityType::PROXY => </code><code class="Brush keyword">array</code><code class="Brush plain">(</code><code class="Brush string">'proxyType'</code> <code class="Brush plain">=> </code><code class="Brush string">'manual'</code><code class="Brush plain">,</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush string">'httpProxy'</code> <code class="Brush plain">=> </code><code class="Brush variable">$ip</code><code class="Brush plain">, </code><code class="Brush string">'sslProxy'</code> <code class="Brush plain">=> </code><code class="Brush variable">$ip</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, </code><code class="Brush variable">$capabilities</code><code class="Brush plain">, 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->manage()->timeouts()->implicitlyWait(15); </code><code class="Brush comments">//隐性设置15秒</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'kw'</code><code class="Brush plain">))->sendKeys(</code><code class="Brush string">'ip'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'su'</code><code class="Brush plain">))->click();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"><code class="Brush functions">echo</code> <code class="Brush string">'done!'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"><code class="Brush comments">//关闭浏览器</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>21</code></td>
<td class="content"><code class="Brush comments">//$driver->quit();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>22</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>23</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<h1> </h1>
<h1>使用总结</h1>
<blockquote class="default">
<p>使用selenium时会遇到很多的坑,这里分享一些经验给大家。</p>
</blockquote>
<div class="markdown-toc"> </div>
<h4>1.wait ~ until的使用</h4>
<blockquote class="default">
<p>要勤使用wait~until,由于我们打开的网页有时候会比较慢时,查找调用某个元素时就比较容易报NoSuchElementException异常。或者有时候一些JS是动态生成的,也需要用到wait~until,不然也会报错。</p>
</blockquote>
<h4> </h4>
<h4>2.switchToEndWindow勤使用</h4>
<blockquote class="default">
<p>switchToEndWindow是我们自定义的一个方法,由于我们使用selenium访问某个网页,然后又点击了其中一个链接,谁知道这个链接是否含有target=”_blank”呢。做爬虫类程序尤为如此。所以我们增加一个方法,每次点击了某个链接跳转后,执行一下switchToEndWindow方法。</p>
<div id="highlighter_633429" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush comments">//切换至最后一个window</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">function</code> <code class="Brush plain">switchToEndWindow(</code><code class="Brush variable">$driver</code><code class="Brush plain">){</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$arr</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->getWindowHandles();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush keyword">foreach</code> <code class="Brush plain">(</code><code class="Brush variable">$arr</code> <code class="Brush keyword">as</code> <code class="Brush variable">$k</code><code class="Brush plain">=></code><code class="Brush variable">$v</code><code class="Brush plain">){</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush keyword">if</code><code class="Brush plain">(</code><code class="Brush variable">$k</code> <code class="Brush plain">== (</code><code class="Brush functions">count</code><code class="Brush plain">(</code><code class="Brush variable">$arr</code><code class="Brush plain">)-1)){</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$driver</code><code class="Brush plain">->switchTo()->window(</code><code class="Brush variable">$v</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4> </h4>
<h4>3.异常处理</h4>
<blockquote class="default">
<p>使用selenium过程中,会碰到各种意想不到的报错。比如做爬虫过程中,都要用try包含起来处理异常,这样可以防止一旦异常报错后,终止了程序的执行。那么在测试的每个节点的健康状态,可在数据库中记录查询。</p>
</blockquote>
<h4> </h4>
<h4>4.定位异常解决</h4>
<blockquote class="default">
<p>元素在网页第一次加载后,就会确定他的坐标,当我们进行了某种操作,改变了宽度或高度,则很容易引起相关元素的坐标改变,从而报错。<br>报错信息:Element is not clickable at point (284, 11).<br>解决保存就是在调用click或submit方式之前先调用sendKeys方法,让其重绘坐标</p>
<div id="highlighter_520353" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$elemA</code><code class="Brush plain">->sendKeys(</code><code class="Brush string">'xxx'</code><code class="Brush plain">)->click();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$elemB</code><code class="Brush plain">->sendKeys(</code><code class="Brush string">'xxx'</code><code class="Brush plain">)->submit();</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>有时候,以上使用sendKeys方式还是没办法解决问题时,则很可能是因为网页中含有浮动DIV,导致各个元素定位变化了。<br>这个时候只需要找到那个浮动的DIV,隐藏掉就可以了。</p>
<div id="highlighter_55004" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush variable">$js</code> <code class="Brush plain">= <<<js</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush keyword">var</code> <code class="Brush plain">nav = document.getElementsByClassName(</code><code class="Brush string">"nav_m"</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">nav.style.display = </code><code class="Brush string">'none'</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush plain">js;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->executeScript(</code><code class="Brush variable">$js</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<blockquote class="default">
<p>如果以上两种方式结合都还有问题的情况下,就建议用JS来解决。</p>
<div id="highlighter_615424" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush comments">//设置屏幕滚动到当前元素</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush variable">$elems</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElements(WebDriverBy::className(</code><code class="Brush string">'n'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush keyword">foreach</code> <code class="Brush plain">(</code><code class="Brush variable">$elems</code> <code class="Brush keyword">as</code> <code class="Brush variable">$elem</code><code class="Brush plain">){</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush keyword">if</code><code class="Brush plain">(CommonUtil::contain(</code><code class="Brush variable">$elem</code><code class="Brush plain">-></code><code class="Brush functions">getText</code><code class="Brush plain">(), </code><code class="Brush string">'下一页'</code><code class="Brush plain">)){</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush variable">$elem</code><code class="Brush plain">->sendKeys(</code><code class="Brush string">'xxx'</code><code class="Brush plain">); </code><code class="Brush comments">//设置焦点</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="spaces"> </code> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="spaces"> </code> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush variable">$js</code> <code class="Brush plain">= <<<js</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush keyword">var</code> <code class="Brush plain">next = document.getElementsByClassName(</code><code class="Brush string">'n'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush keyword">for</code> <code class="Brush plain">(i = 0; i < next.length; i++) {</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>13</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush keyword">if</code><code class="Brush plain">(next.innerHTML == </code><code class="Brush string">'下一页&gt;'</code><code class="Brush plain">){</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>14</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush comments">//next.click();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>15</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">next.style.backgroundColor = </code><code class="Brush string">"red"</code><code class="Brush plain">;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>16</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>17</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>18</code></td>
<td class="content"><code class="Brush plain">js;</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>19</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>20</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->executeScript(</code><code class="Brush variable">$js</code><code class="Brush plain">); </code><code class="Brush comments">//JS执行点击下一页</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> </p>
</blockquote>
<h4>5.执行时间的设置</h4>
<blockquote class="default">
<p>使用自动化测试或爬虫程序,往往程序执行的时间会比较长。为了防止timeout,我们需要设置如下</p>
<div id="highlighter_51414" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush plain">set_time_limit(0);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush plain">ignore_user_abort(true);</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p> </p>
</blockquote>
<p>下载资料:<br>1.http://selenium-release.storage.googleapis.com/index.html (selenium 下载地址)<br>2.https://chromedriver.storage.googleapis.com/index.html (chrome driver 下载地址)<br>3.http://phantomjs.org/download.html (PhantomJS Driver 下载地址)<br>4.http://www.cnbeta.com/articles/soft/563605.htm (chrome 下载地址,建议使用这个版本或者以下版本,其他最新版本,浏览器识别了是否为测试软件,对于个别用途的软件需要注意,如果仅仅是为了做测试,那就无所谓了。)<br>5.http://blog.csdn.net/huilan_same/article/details/51896672 (chromedriver.exe版本对应的chrome版本)</p>
<p> </p>
<p>参考文档:<br>1.https://github.com/facebook/php-webdriver (里面有example.php以及 tests文件下的案例文档共参考)<br>2.https://github.com/facebook/php-webdriver/wiki 快速开始教程<br>3.http://facebook.github.io/php-webdriver/namespaces/default.html API文档<br>4.http://www.yiibai.com/selenium/ 易百教程<br>6.https://github.com/chibimagic/WebDriver-PHP/<br>7.https://code.google.com/archive/p/php-webdriver-bindings/<br>8.https://github.com/Element-34/php-webdriver<br>9.https://github.com/Nearsoft/php-selenium-client<br>10.http://pan.baidu.com/s/1eR31pM6 selenium_webdriver(python)第一版.pdf</p>
<p> </p>
</div>
</div>
</div>
</div>
<div id="content" class="post-single-content box mark-links"> </div>
<h1>元素定位</h1>
<h4>1. WebDriverBy::id()</h4>
<blockquote class="default">
<p>通过ID属性定位元素</p>
<div id="highlighter_116429" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush comments">//<input id="kw" name="wd" class="s_ipt" maxlength="255" autocomplete="off" /></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome(), 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>7</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::id(</code><code class="Brush string">'kw'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>8</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>2. WebDriverBy::name()</h4>
<blockquote class="default">
<p>通过name属性定位元素。如果查找多个,则使用findElements进行定位</p>
<div id="highlighter_224495" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush comments">//<input id="kw" name="wd" class="s_ipt" maxlength="255" autocomplete="off" /></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome(), 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::name(</code><code class="Brush string">'wd'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush keyword">foreach</code><code class="Brush plain">(</code><code class="Brush variable">$elements</code> <code class="Brush keyword">as</code> <code class="Brush variable">$elem</code><code class="Brush plain">){ </code><code class="Brush comments">//有时候多个元素时,想找出某个特定元素,可根据attribute或text进行判断过滤</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush functions">echo</code> <code class="Brush variable">$elem</code><code class="Brush plain">->getAttribute(</code><code class="Brush string">'type'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="spaces"> </code><code class="Brush functions">echo</code> <code class="Brush variable">$elem</code><code class="Brush plain">-></code><code class="Brush functions">getText</code><code class="Brush plain">();</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>11</code></td>
<td class="content"><code class="Brush plain">}</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>12</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>3. WebDriverBy::tagName()</h4>
<blockquote class="default">
<p>通过标签进行定位元素。如果查找多个,则使用findElements进行定位,具体参考WebDriverBy::name()的代码</p>
<div id="highlighter_554246" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>01</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>02</code></td>
<td class="content"><code class="Brush comments">//<input type="hidden" name="rsv_bp" value="0" /></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>03</code></td>
<td class="content"><code class="Brush comments">//<input id="kw" name="wd" class="s_ipt" maxlength="255" autocomplete="off" /></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>04</code></td>
<td class="content"><code class="Brush comments">//.....</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>05</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>06</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>07</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome(), 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>08</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>09</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::tagName(</code><code class="Brush string">'input'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>10</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>4. WebDriverBy::className()</h4>
<blockquote class="default">
<p>通过css类进行定位元素。如果查找多个,则使用findElements进行定位,具体参考WebDriverBy::name()的代码</p>
<div id="highlighter_83402" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush comments">//<input id="kw" name="wd" class="s_ipt" maxlength="255" autocomplete="off" /></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome(), 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>7</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::className(</code><code class="Brush string">'s_ipt'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>8</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>5. WebDriverBy::linkText()</h4>
<blockquote class="default">
<p>通过超文本链接上的文字信息来定位元素。如果查找多个,则使用findElements进行定位,具体参考WebDriverBy::name()的代码</p>
<div id="highlighter_356820" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush comments">//<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome(), 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>7</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::linkText(</code><code class="Brush string">'新闻'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>8</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>6. WebDriverBy::partialLinkText()</h4>
<blockquote class="default">
<p>这个方法是上一个方法的扩展。当你不能准确知道超链接上的文本信息或者只想通过一些关键字进行匹配时,可以使用这个方法来通过部分链接文字进行匹配。如果查找多个,则使用findElements进行定位,具体参考WebDriverBy::name()的代码</p>
<div id="highlighter_378785" class="syntaxhighlighterBrush">
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush comments">//HTML代码</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush comments">//<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a></code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"> </td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>4</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>5</code></td>
<td class="content"><code class="Brush variable">$driver</code> <code class="Brush plain">= RemoteWebDriver::create(</code><code class="Brush variable">$host</code><code class="Brush plain">, DesiredCapabilities::chrome(), 5000);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>6</code></td>
<td class="content"><code class="Brush variable">$driver</code><code class="Brush plain">->get(</code><code class="Brush string">'https://www.baidu.com/'</code><code class="Brush plain">);</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>7</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::partialLinkText(</code><code class="Brush string">'新'</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>8</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</blockquote>
<h4>7. WebDriverBy::xpath()</h4>
<blockquote class="default">
<p>这个方法是非常强大的元素查找方式,使用这种方法几乎可以定位到页面上的任意元素。在正式开始使用XPath进行定位前,我们先了解下什么是XPath。XPath是XML Path的简称,由于HTML文档本身就是一个标准的XML页面,所以我们可以使用XPath的语法来定位页面元素。更多详细的定位资料,参考页脚链接地址。</p>
</blockquote>
<p>XPath语法如下:</p>
<div id="highlighter_514567" class="syntaxhighlighterBrush">
<div class="bar show"> </div>
<div class="lines">
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>1</code></td>
<td class="content"><code class="Brush plain"><?php</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt2">
<table>
<tbody>
<tr>
<td class="number"><code>2</code></td>
<td class="content"><code class="Brush variable">$element</code> <code class="Brush plain">= </code><code class="Brush variable">$driver</code><code class="Brush plain">->findElement(WebDriverBy::xpath(</code><code class="Brush string">"//*[@id='J_login_form']/dl/dt/input[@id='J_password']"</code><code class="Brush plain">));</code></td>
</tr>
</tbody>
</table>
</div>
<div class="line alt1">
<table>
<tbody>
<tr>
<td class="number"><code>3</code></td>
<td class="content"><code class="Brush plain">?></code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div><br><br>
来源:https://www.cnblogs.com/php12-cn/p/12609647.html
頁:
[1]