前言
使用无头浏览器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去跑。
溜了,写代码去了,记得点赞啊!