php-webdriver 基本功能(爬虫)

打开指定网页

$driver->get("http://www.google.com.tw/");

输入框操作

sendKeys

輸入框操作是最基本的,你必需先使用 findElement 來找到你要輸入的 input ,然後透過 sendKeys 將指定的值輸入。

  • clear :清空 input
  • sendKeys:輸入 input
$element = $driver->findElement(
  WebDriverBy::cssSelector('.input')
);
$element->clear(); //清空
$element->sendKeys("test value");

操作方向键

sendKeys: WebDriverKeys::LEFT

下面这个范例,会在 input 中会填入 “AC” 这两个字,然后操作方向鍵往左边移动一格,接著再輸入 B ,最后结果, input 中就会有字串 “ABC”

$element = $driver->findElement( WebDriverBy::cssSelector('input'));
$element->sendKeys("AC");
$element->sendKeys(WebDriverKeys::LEFT);
$element->sendKeys("B");

Select 选择

selectByValue

一般来说你可以使用 sendKeys 的方式來选取 option,但是 selenium 预设的 method sendKeys,是选取你看到的文字內容,例如我有一个选單 value=”math”, text=”数学” ,那么我的程式要这样写 sendKeys(“数学”),文字內容有可能会因为各种原因而改变其值,所以我会傾向去对 value 来做选取。

而 php-webdriver 已经有提供另一种方式來选取 option ,你可以使用 WebDriverSelect 的 selectByValue 就能够直接选择 value 而不是 text,是不是方便很多呢。

$elm = $driver->findElement(
    WebDriverBy::cssSelector("select")
);

$selectAcao = new WebDriverSelect($elm);
$selectAcao->selectByValue("math");

改变 select 的值,並触发 Change Event
用 php-webdriver sendKeys 方式去选择 select 会有两个问题,第一问题是你只能指定要选择的 label 名称,而不能指定 value ,第二个问题則是,选了 select 的选项之后,浏览器不会自动执行 select change event ,因为 Selenium 原本就是用 Javascript 写的, Selenium 它本身就会用 Javascript 去修改 select 的值,这样无法触发 change event 。

这里我使用 YUI 3 來选取 select 的 value ,並自动去执行 select 的 change event (你要测试的网页必需要有载入 YUI 3,当然你也可以用 executeScript 的方式去载入 YUI 3 )。

$driver->executeScript('YUI().use("node","node-event-simulate", function(Y) { var s = Y.one(".class select").set("value", "xxx"); });');

$driver->executeScript('YUI().use("node","node-event-simulate", function(Y) { Y.one(".class select").simulate("change"); });');

执行 Javascript

executeScript

使用 Selenium 有个很方便的 method ,那就是 executeScript,很多 Selenium 沒有支援的功能,你都可以直接使用 Javascript 來执行。

$driver->executeScript('var d = document.querySelector(".class"); d.style.visibility="visible";');

拖拉物件 : drag and drop

$sourceElm = $driver->findElement(WebDriverBy::cssSelector('.source'));
$targetElm = $driver->findElement(WebDriverBy::cssSelector('.target'));

$action = $driver->action();
$action->dragAndDrop($sourceElm, $targetElm)->perform();

Element 操作

  1. getText : element 內容
  2. getTagName : 取得 element 名稱
  3. getAttribute
  4. getCSSValue
  5. getLocation : 取得 element 所在位置
  6. getLocationOnScreenOnceScrolledIntoView
  7. getSize
  8. getID
  9. isEnabled
  10. isSelected
  11. isDisplayed
  12. clear
  13. click
  14. sendKeys
  15. submit

getText 取得 element 的 innerText 內容

Element 必需是可見的,不能隐藏,例如 「display: none, opacity: 0;, visibility: hidden」 都会造成无法取得 text。

$elm = $driver->findElement(
  WebDriverBy::cssSelector('.classname')
);

echo $elm->getText();
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值