前言
使用無頭瀏覽器phantomjs時屢次出現console++.js:263報錯
查看了id亦或是class,甚至換了name都還是出這個問題
查找不到元素後繼的程序自然出現問題無法執行報錯。
解決辦法
程序執行速度很快,網站一般使用JS渲染數據,此時就需要讓咱們的抓取代碼稍等一會才能看到控件。
解決辦法很簡單
Thread.sleep(3000);
讓程序休眠一下等待控件加載出來
看了一個大佬的做法,更能徹底解決問題
int retry = 20;//失敗的話,最多循環多少次
int i = 1;//計數用,第一次,所以1開頭
bool again = false;//配合計數,是否繼續循環
do
{
try
{
again = false;
//配合計數,需要預估下正常情況多少秒之內可以成功。
//這個500毫秒乘以總次數要求大於預計成功的時間
Thread.Sleep(500);
driver1.FindElementById("ID").SendKeys("123");//這裏容易報錯
}
catch (Exception)
{
again = true;
i++;
if (i >= retry)
again = false;
//截圖看下錯誤樣子
driver1.GetScreenshot().SaveAsFile(string.Format(path, DateTime.Now.ToString("yyyyMMdd HHmmssfff.A")), ScreenshotImageFormat.Png);
}
}while(again);
套用一個循環,失敗就重試,反覆等待不報錯。
其實個人覺得只要等待時間設置幾秒一般不會出現找不到控件這個錯誤
怎麼改全憑個人喜好咯!
最後說一下,phantomjs已然老了
- phantomjs註定會被chrome headless吃掉,不建議繼續使用
- phantomjs在對ES6的支持上天生有坑,前端使用ES6的網站都不建議用phantomjs去跑。
溜了,寫代碼去了,記得點贊啊!