【PhpSelenium】2.基本使用

僅用于交流和學(xué)習(xí),禁止利用本資源從事任何違反本國(地區(qū))法律法規(guī)的活動(dòng),一切遵守《網(wǎng)絡(luò)安全法》

代碼區(qū)黏貼出來的時(shí)候特殊符號(hào)會(huì)自動(dòng)添加轉(zhuǎn)義\,可能沒有完全改好,如果運(yùn)行有問題,請參考示例代碼)

示例流程

  1. 打開百度頁面
  2. 搜索新浪微博
  3. 在新浪微博頁面搜索周杰倫
  4. 輸出周杰倫相關(guān)熱門微博

實(shí)戰(zhàn)步驟

1、 <a id="b1">通過composer安裝Selenium:</a>

[root@ar414.com Test]composer require facebook/webdriver  

2、 <a id="b2">啟動(dòng)Selenium Server</a>

[root@ar414.com Test] java -jar selenium-server-standalone-3.141.59.jar  

3、示例代碼(https://github.com/ar414-com/phpseleniumdemo/tree/master/Test)

<?php  

namespace Facebook\WebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;  
use Facebook\WebDriver\Remote\RemoteWebDriver;

require_once('vendor/autoload.php');


header("Content-Type: text/html; charset=UTF-8");

$waitSeconds = 15;  //需等待加載的時(shí)間,一般加載時(shí)間在0-15秒,如果超過15秒,報(bào)錯(cuò)。

$host = 'http://localhost:4444/wd/hub'; // this is the default

$capabilities = DesiredCapabilities::chrome();

$driver = RemoteWebDriver::create($host, $capabilities, 5000);

try  
{  
    $driver->get('https://www.baidu.com/'); 
 
    echo "當(dāng)前頁面標(biāo)題:".$driver->getTitle()."\n";  
 
    //定位到輸入框\->輸入"新浪微博"->點(diǎn)擊搜索  
    $driver->findElement(WebDriverBy::id('kw'))->sendKeys('新浪微博')->submit();  
 
    // 等待新的頁面加載完成....  
    $driver->wait($waitSeconds)->until( WebDriverExpectedCondition::visibilityOfElementLocated(WebDriverBy::partialLinkText('新浪微博') ) ); 
     
 
    //保存當(dāng)前頁面  
    savePageSource($driver,1);  
  
    //一般點(diǎn)擊鏈接的時(shí)候,擔(dān)心因?yàn)槭ソ裹c(diǎn)而拋異常,則可以先調(diào)用一下sendKeys,再click  
    $driver->findElement(WebDriverBy::partialLinkText('新浪微博'))->sendKeys('xxx')->click();  
  
    switchToEndWindow($driver); //切換至最后一個(gè)window

    $driver->wait($waitSeconds)->until(WebDriverExpectedCondition::visibilityOfElementLocated( WebDriverBy::cssSelector('h2.UG_box_title')     ));
        
 
    echo "當(dāng)前頁面標(biāo)題:".$driver->getTitle()."\n";
 
 //保存當(dāng)前頁面  
    savePageSource($driver,2);

    $driver->findElement(WebDriverBy::cssSelector('input.W_input'))->sendKeys('周杰倫');  
    $driver->findElement(WebDriverBy::cssSelector('a.W_ficon.ficon_search.S_ficon'))->sendKeys('xxx')->click();
    
    $driver->wait($waitSeconds)->until(  
 WebDriverExpectedCondition::visibilityOfElementLocated( WebDriverBy::cssSelector('div.info') ));
 
    echo "當(dāng)前頁面標(biāo)題:".$driver->getTitle()."\n";
    
    //保存當(dāng)前頁面  
    savePageSource($driver,3);
    
    //獲取相關(guān)熱門  
    //div.card-wrap
    $elements = $driver->findElements(WebDriverBy::cssSelector('div.card-wrap'));
    
    foreach($elements as $index => $element)  
    {
        $userNickName = $element->findElement(WebDriverBy::cssSelector('a.name'))->getText();  
        echo "用戶名:$userNickName\n";  
        $content = $element->findElement(WebDriverBy::cssSelector('p.txt'))->getText();  
        echo "內(nèi)容:{$content} \n";  
        echo "------------------------分割線\------------------------\n";
    }
    
    //關(guān)閉標(biāo)簽并退出瀏覽器  
    $driver->close();  
    $driver->quit();
    
}
catch (\Throwable $throwable)
{
    $driver->close();  
    $driver->quit();  
    var_dump($throwable->getMessage());
}

/**  
 * 保存頁面  
 * @param $driver 
 * @param $pageNumber 
 */
function savePageSource($driver,$pageNumber)  
{  
    //獲取頁面資源  
    $pageSource = $driver->getPageSource(); //輸入到文件  
    file_put_contents("./ar414_page{$pageNumber}.html",$pageSource);
}
 
/**  
 * 切換至最后一個(gè)window  
 * 因?yàn)橛行┚W(wǎng)站的鏈接點(diǎn)擊過去帶有target="_blank"屬性,  
 * 就新開了一個(gè)TAB,而selenium還是定位到老的TAB上,  
 * 如果要實(shí)時(shí)定位到新的TAB,則需要調(diào)用此方法,  
 * 切換到最后一個(gè)window  
 * @param $driver 
 */
function switchToEndWindow($driver)
{  
    $arr = $driver->getWindowHandles();
    foreach ($arr as $k=>$v){
        if($k == (count($arr)-1)){
            $driver->switchTo()->window($v);
        }
    }
}

4、<a id="b3">運(yùn)行示例代碼</a>

[root@ar414.com Test] ll -a
total 24
drwxr-xr-x 3 root root   90 Dec 15 21:50 .
drwxr-xr-x 7 root root 4096 Dec 15 19:53 ..
-rw-r--r-- 1 root root   64 Dec 15 19:59 composer.json
-rw-r--r-- 1 root root 4925 Dec 15 19:59 composer.lock
-rw-r--r-- 1 root root   28 Dec 15 21:43 .gitignore
-rw-r--r-- 1 root root 3820 Dec 15 21:42 Run.php
drwxr-xr-x 5 root root   69 Dec 15 20:01 vendor
[root@ar414.com Test] php Run.php
當(dāng)前頁面標(biāo)題:百度一下,你就知道
當(dāng)前頁面標(biāo)題:微博-隨時(shí)隨地發(fā)現(xiàn)新鮮事
當(dāng)前頁面標(biāo)題:微博搜索
用戶名:周杰倫資訊網(wǎng)官方微博
內(nèi)容:周杰倫【我是如此相信】完整MV 大首播!

MV中周杰倫戴著鴨舌帽帥氣入鏡,回到剛出道第一張專輯的造型!在樂壇邁入20年的此刻,周杰倫也用MV影像作品帶大家重回初心。

周杰倫新歌-我是如此相信 MV大首播!
周杰倫#fanstube#
L周杰倫資訊網(wǎng)官方微博的微博視頻
------------------------分割線------------------------
用戶名:全球熱門搜羅
內(nèi)容:周杰倫精選的慢歌30首:

《 說好不哭+等你下課+愛在西元前+安靜+可愛女人+星晴+彩虹+斷了的弦+楓+告白氣球+擱淺+黑色毛衣+黑色幽默+東風(fēng)破+髪如雪+算什麼男人+千里之外+青花瓷+晴天+大笨鐘+她的睫毛+愛情廢柴+我不配+心雨+夜的第七章+夜曲+一路向北+稻香》

視頻較長,建 展開全文c
------------------------分割線------------------------
用戶名:杰威爾音樂官方微博
內(nèi)容:周杰倫「我是如此相信」電影天火主題曲
表達(dá)了在面對(duì)災(zāi)難時(shí),不畏艱難、不放棄的信念!歌好聽電影也要記得去看!
QQ音樂鏈接L我是如此相信 (《天火》電影主題曲)
------------------------分割線------------------------
用戶名:愛川川
內(nèi)容:周杰倫
所有人都在聽的周杰倫新歌《我是如此相信》,該作品有方文山作詞,周杰倫作曲和演唱,喜歡、支持周杰倫的歌曲 L愛川川的微博視頻
------------------------分割線------------------------
用戶名:多年以前多年前
內(nèi)容:嗯啦喜歡周杰倫 2武漢 L多年以前多年前的微博視頻
------------------------分割線------------------------
用戶名:南國都市報(bào)
內(nèi)容:#聽歌# 周杰倫《我是如此相信》1080P官方完整版MV,一起來聽周董的新歌吧~L周杰倫微博臺(tái)的微博視頻
------------------------分割線------------------------
用戶名:浮生南
內(nèi)容:電影《天火》主題曲——周杰倫新歌「我是如此相信」

表達(dá)了在面對(duì)災(zāi)難時(shí),不畏艱難、不放棄的信念!好好聽 L浮生南的微博視頻
------------------------分割線------------------------
用戶名:江珊Harley
內(nèi)容:【周杰倫我是如此相信】,我投給了“#我是如此相信 好聽#”這個(gè)選項(xiàng),你也快來表態(tài)吧~
------------------------分割線------------------------
用戶名:jeunao
內(nèi)容:#周杰倫海口演唱會(huì)##周杰倫深圳演唱會(huì)#
周杰倫 地表最強(qiáng)巡回演唱會(huì) 門票
???500/700/900/1300/1700/2000
有e???,前徘少量,要俬 #周杰倫演唱會(huì)# i
------------------------分割線------------------------
用戶名:我源哥才是大總攻
內(nèi)容:#宋亞軒 一個(gè)人的阿卡貝拉# #宋亞軒翻唱周杰倫晴天# 喜歡上這么個(gè)優(yōu)秀小孩也太幸福了
------------------------分割線------------------------
用戶名:就愛傲嬌的周小只
內(nèi)容:我艸!老子都不曉得是該笑還是該哭了。。。果然jvr的員工只有周杰倫一個(gè)人
------------------------分割線------------------------
用戶名:婷strawberryfve
內(nèi)容:#周杰倫新歌我是如此相信#不得不承認(rèn),我小時(shí)候的眼光真的很好
------------------------分割線------------------------
用戶名:娛樂圈有飯
內(nèi)容:吳謹(jǐn)言一天喝兩三杯奶茶??周杰倫都不敢說自己一天兩三杯奶茶吧
------------------------分割線------------------------
用戶名:整理師睿姿
內(nèi)容:#周杰倫新歌我是如此相信# 周董又出新歌了,趕緊聽聽。Apple Music:《我是如此相信》 (電影《天火》主題曲) 天王嫂是這個(gè)電影的女主角。so 周董也是為了捧媳婦兒。話說 昆凌的演技還需要再歷練歷練。周董在mv中 好像瘦了哦
------------------------分割線------------------------
用戶名:He_說
內(nèi)容:周杰倫 ×#周杰倫新歌我是如此相信#

戴著鴨舌帽的酷酷男孩
二十年始終如一
#我是如此相信##世無其二周杰倫#
------------------------分割線------------------------
用戶名:一朵小枇杷
內(nèi)容:我參與了@榮耀的背后刻著一道孤獨(dú)0118 發(fā)起的【周杰倫我是如此相信】,我投給了“#周杰倫新歌我是如此相信#”這個(gè)選項(xiàng),你也快來表態(tài)吧~
------------------------分割線------------------------
用戶名:搞笑巍
內(nèi)容:《昆凌如果真的要當(dāng)演員,首先還是要擺脫周杰倫的影子》 O昆凌如果真的要當(dāng)演員,首先還是要擺脫周杰倫的影子
------------------------分割線------------------------
用戶名:首發(fā)微音樂
內(nèi)容:#周杰倫新歌我是如此相信# 周杰倫《我是如此相信》官方版MV首發(fā),熟悉的抒情搖滾曲風(fēng),那個(gè)鴨舌帽男孩回來了 L首發(fā)微音樂的微博視頻
------------------------分割線------------------------
用戶名:周杰倫微博臺(tái)
內(nèi)容:【#周杰倫新歌我是如此相信#】
有一種天氣叫《晴天》
有一種香氣叫《稻香》
有一種晚安叫《夜曲》
有一種停滯叫《擱淺》
有一種美麗叫《彩虹》
有一種海洋叫《花?!?有一種靜謐叫《安靜》
有一種夜空叫《星晴》
有一種讓步叫《退后》
有一種勸誡叫《不該》
有一種國寶叫《青花瓷》
有一種香味叫《七里 展開全文c
------------------------分割線------------------------
用戶名:會(huì)星座的兔子
內(nèi)容:#周杰倫新歌我是如此相信#你覺得周杰倫新歌如何? 你覺得周杰倫新歌如何?
------------------------分割線------------------------
用戶名:酒釀饅頭魚
內(nèi)容:#宋亞軒翻唱周杰倫晴天# #宋亞軒 一個(gè)人的阿卡貝拉#
沒簽到的速來簽到了,這個(gè)數(shù)據(jù)一點(diǎn)都不可啊對(duì)不對(duì)
沒簽到的小噴漆要被打屁股哦e?¤?
首頁來接力?
------------------------分割線------------------------
用戶名:諸葛亮郭嘉
內(nèi)容:#周杰倫# #周杰倫新歌# #周杰倫新歌MV# #周杰倫我如此相信mv# 周杰倫新歌MV終于上線了《我是如此相信》是由方文山作詞 周杰倫作曲并演唱的一首歌曲。我是如此相信 在背后支撐是你 一直與我并肩同行
------------------------分割線------------------------
用戶名:你若撒野我把酒奉陪0118
內(nèi)容:太慘了,所以新歌沒嵌入到電影里,是不是就是因?yàn)橹挥兄芙軅惡弯浉璧热斯ぷ?,所以都忙完沒時(shí)間嵌入了e???e???e???
------------------------分割線------------------------
用戶名:HannahQuinli...
string(291) "no such element: Unable to locate element: {"method":"css selector","selector":"p.txt"}
  (Session info: chrome=78.0.3904.108)
  (Driver info: chromedriver=78.0.3904.105 (60e2d8774a8151efa6a00b1f358371b1e0e07ee2-refs/branch-heads/3904@{#877}),platform=Linux 3.10.0-862.9.1.el7.x86_64 x86_64
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Selenium 官網(wǎng)Selenium WebDriver官網(wǎng)webdriver實(shí)用指南python版本 WebD...
    顧顧314閱讀 47,285評(píng)論 0 34
  • 現(xiàn)狀 好久好久沒有更新博客了,應(yīng)該有一個(gè)月了吧,這段時(shí)間內(nèi),好忙,公司的業(yè)務(wù)在上漲期,但是卻把下面的一個(gè)小朋友砍掉...
    jb2閱讀 1,419評(píng)論 0 2
  • “30多歲沒有特殊技能、沒有存款、沒有結(jié)婚、不想打工,應(yīng)該怎么賺到50萬?“ 這是前幾天遇到的一個(gè)問題,確切地說遇...
    矯情小白菜閱讀 2,182評(píng)論 0 4
  • 我喜歡聽音樂。音樂是從詩歌發(fā)展而來,有一種靈魂深處的力量。音樂的表現(xiàn)方式,以及音樂人對(duì)音樂的執(zhí)著、癡迷、領(lǐng)悟,常常...
    江蘇劉志祥閱讀 403評(píng)論 0 0
  • “那一年,我們還不會(huì)打醬油;那一年,人生還不像是茶幾;那一年,杯具還只是用來盛水!“在這些感慨過后,小伙伴們,是否...
    Diggerlab閱讀 398評(píng)論 0 1

友情鏈接更多精彩內(nèi)容