<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                > 使用selenium時會遇到很多的坑,這里分享一些經驗給大家。 [TOC] #### 1.wait ~ until的使用 > 要勤使用wait~until,由于我們打開的網頁有時候會比較慢時,查找調用某個元素時就比較容易報NoSuchElementException異常。或者有時候一些JS是動態生成的,也需要用到wait~until,不然也會報錯。 #### 2.switchToEndWindow勤使用 > switchToEndWindow是我們自定義的一個方法,由于我們使用selenium訪問某個網頁,然后又點擊了其中一個鏈接,誰知道這個鏈接是否含有target="_blank"呢。做爬蟲類程序尤為如此。所以我們增加一個方法,每次點擊了某個鏈接跳轉后,執行一下switchToEndWindow方法。 ~~~ <?php //切換至最后一個window function switchToEndWindow($driver){ $arr = $driver->getWindowHandles(); foreach ($arr as $k=>$v){ if($k == (count($arr)-1)){ $driver->switchTo()->window($v); } } } ?> ~~~ #### 3.異常處理 > 使用selenium過程中,會碰到各種意想不到的報錯。比如做爬蟲過程中,都要用try包含起來處理異常,這樣可以防止一旦異常報錯后,終止了程序的執行。那么在測試的每個節點的健康狀態,可在數據庫中記錄查詢。 #### 4.定位異常解決 > 元素在網頁第一次加載后,就會確定他的坐標,當我們進行了某種操作,改變了寬度或高度,則很容易引起相關元素的坐標改變,從而報錯。 > 報錯信息:Element is not clickable at point (284, 11). > 解決保存就是在調用click或submit方式之前先調用sendKeys方法,讓其重繪坐標 ~~~ $elemA->sendKeys('xxx')->click(); $elemB->sendKeys('xxx')->submit(); ~~~ > 有時候,以上使用sendKeys方式還是沒辦法解決問題時,則很可能是因為網頁中含有浮動DIV,導致各個元素定位變化了。 > 這個時候只需要找到那個浮動的DIV,隱藏掉就可以了。 ~~~ $js = <<<js var nav = document.getElementsByClassName("nav_m"); nav[0].style.display = 'none'; js; $driver->executeScript($js); ~~~ >如果以上兩種方式結合都還有問題的情況下,就建議用JS來解決。 ~~~ //設置屏幕滾動到當前元素 $elems = $driver->findElements(WebDriverBy::className('n')); foreach ($elems as $elem){ if(CommonUtil::contain($elem->getText(), '下一頁')){ $elem->sendKeys('xxx'); //設置焦點 } } $js = <<<js var next = document.getElementsByClassName('n'); for (i = 0; i < next.length; i++) { if(next[i].innerHTML == '下一頁&gt;'){ //next[i].click(); next[i].style.backgroundColor = "red"; } } js; $driver->executeScript($js); //JS執行點擊下一頁 ~~~ #### 5.執行時間的設置 > 使用自動化測試或爬蟲程序,往往程序執行的時間會比較長。為了防止timeout,我們需要設置如下 ~~~ set_time_limit(0); ignore_user_abort(true); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看