selenium webdriver 怎么抓页面的js error

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium webdriver 怎么抓页面的js error相关的知识,希望对你有一定的参考价值。

selenium webdriver的硬伤在于它无法真正判断页面上的元素什么时候能生成完毕,换句话说 ,假如获取页面上的元素失败,而这个元素是由js,ajax生成并且是未知的情况下(例如:要抓取网页关键词,但是关键词的内容是什么,一共有几个都是未知的情况下) 你无法判断是元素尚未被生成还是页面原本就没有这个元素导致的获取失败。
刚才说webdriver无法真正判断页面元素生成完毕,但webdriver提供了判断页面是否加载完成的方法,只不过这个加载完成的含义是页面上的html和JS代码加载完成,但js,ajax还可能在html和JS加载完之后执行从而改变页面上的内容,所以像刚才举例的网页上的关键词抓取失败就很难判断是js,ajax没有运行完毕还是页面上原本就没有这个元素导致的。
虽然selenium webdriver没有提供判断页面上的js,ajax是否执行完毕的功能,但不等于完全没有办法判断。官方也承认并不是不可以而是非常困难。昨天群里一位高手也说这种情况需要自行查看页面上的动态脚本代码以得知判断页面执行完的条件。我相信一个第三方库是比较难做到这一点的,即使牛逼到能实现,也不排除页面上有一个持续或者定时与服务器通信的动态脚本在实时改变页面内容,这样一来页面永远没有生成完毕的那一刻。
对于刚才说的抓取页面上未知元素,目前普遍的做法是在程序里面显示指定等待一段时间,确保有足够的时间让它生成,当然,不排除网络太差直到等待超时也来不及生成的情况。如果元素已知,可以显示用selenium webdriver提供的方法显示等待某一个元素在页面上出现后再继续执行下面的代码。
参考技术A python的js解析,发现使用Selenium+PhantomJS的方案还是比较适合我的,以下是环境配置教程。Selenium及PhantomJS介绍:Selenium是一个用于Web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、MozillaFirefox、Chrome等。PhantomJS是一个服务器端的javascriptAPI的WebKit。其支持各种Web标准:DOM处理,CSS选择器,JSON,Canvas,和SVG。安装环境:Windows7(64位)python2.7.8配置过程:1、使用pip安装Selenium,如果没有安装pip的请参考我之前的博客文章。命令:pipinstall-Uselenium2、安装PhantomJS,到PhantomJS的官方网站上下载,然后放到python的安装目录。PhantomJS下载如果想使用Chrome来实现解析的,请下载GG浏览器的相应驱动(同时需要安装chrome浏览器),如上图中的第一个程序,第二个程序就是PhantomJS了。如果想使用Firefox来实现解析,则需要安装Selenium提供的firefox插件,位于python安装目录Lib\site-packages\selenium\webdriver\firefox\webdriver.xpi,请拖入到firefox浏览器中,然后重启浏览器即可。Selenium+PhantomJS使用:使用方法很简单,代码如下,如果成功打印出网站的标题,那么说明已经可以成功使用了。fromseleniumimportwebdriverdriver=webdriver.PhantomJS()#webdriver.Firefox()driver.get('httpn/')printdriver.titledriver.quit()

使用Java查找Selenium WebDriver中的分页表中的行数

我有一个有多个页面的网格,每个页面有10行,我需要获取此页面中总行数,我怎么能在使用java的webdriver中做到这一点?

答案
WebElement table = driver.findElement(By.cssSelector("div[class = 'k-widget k-grid k-reorderable']")); 
int rowcount = table.findElements(By.cssSelector("tr[class='k-alt']")).size();

以上是关于selenium webdriver 怎么抓页面的js error的主要内容,如果未能解决你的问题,请参考以下文章

python下用selenium的webdriver包如何取得打开页面的html源代码呢

使用Java查找Selenium WebDriver中的分页表中的行数

selenium 怎么获取当前窗口的标题

无法使用 Selenium 和页面工厂在页面对象类中调用“org.openqa.selenium.WebDriver.getTitle()”

selenium学习笔记webdriver进行页面元素定位

使用java在Selenium WebDriver(Selenium 2)中向上或向下滚动页面