selenium webdriver 怎么抓页面的js error

selenium webdriver 怎么抓页面的js error,第1张

selenium webdriver的硬伤在于它无法真正判断页面上的元素什么时候能生成完毕,换句话说 ,假如获取页面上的元素失败,而这个元素是由js,ajax生成并且是未知的情况下(例如:要抓取网页关键词,但是关键词的内容是什么,一共有几个都是未知的情况下) 你无法判断是元素尚未被生成还是页面原本就没有这个元素导致的获取失败。

刚才说webdriver无法真正判断页面元素生成完毕,但webdriver提供了判断页面是否加载完成的方法,只不过这个加载完成的含义是页面上的html和JS代码加载完成,但js,ajax还可能在html和JS加载完之后执行从而改变页面上的内容,所以像刚才举例的网页上的关键词抓取失败就很难判断是js,ajax没有运行完毕还是页面上原本就没有这个元素导致的。

虽然selenium webdriver没有提供判断页面上的js,ajax是否执行完毕的功能,但不等于完全没有办法判断。官方也承认并不是不可以而是非常困难。昨天群里一位高手也说这种情况需要自行查看页面上的动态脚本代码以得知判断页面执行完的条件。我相信一个第三方库是比较难做到这一点的,即使牛逼到能实现,也不排除页面上有一个持续或者定时与服务器通信的动态脚本在实时改变页面内容,这样一来页面永远没有生成完毕的那一刻。

对于刚才说的抓取页面上未知元素,目前普遍的做法是在程序里面显示指定等待一段时间,确保有足够的时间让它生成,当然,不排除网络太差直到等待超时也来不及生成的情况。如果元素已知,可以显示用selenium webdriver提供的方法显示等待某一个元素在页面上出现后再继续执行下面的代码。

1、可以通过浏览器的调试功能,例如Firefox按F12,点网络标签,然后就可以看到网页的所有数据信息,网页通过AJAX异步加载的数据也可以得到。 2、使用抓包类的工具,如SmartSniff,经过分析也可以得到数据也可以得到数据

不能, firebug/chrome控制台这些看得一清二楚 flash加载的抓包工具也能看到,现在甚至还有拿phantomjs这种神器搞采集的只能监控IP周期内的访问频率再随机输出验证码, 不过,碰上针对性的采集+打码机也没辙

一、查看相应的js代码,用python获取原始数据之后,模仿js编写相应的python代码。

二、通过接口api获得数据,直接使用python获取接口数据并处理。

三。终极方法。使用 Selenium和PhantomJS执行网页js代码,然后再获取数据,这种方法100%可以获取数据,确定就是速度太慢。

mac os x 环境 本人亲自测试ok:

1 安装phantomjs

brew install phantomjs

2 建立js文件

/

Created by xiehonghao on 16-7-24

/

//codesjs

system = require('system')

address = systemargs[1];//获得命令行第二个参数 接下来会用到

//consolelog('Loading a web page');

var page = require('webpage')create();

var url = address;

//consolelog(url);

pageopen(url, function (status) {

//Page is loaded!

if (status !== 'success') {

consolelog('Unable to post!');

} else {

//consolelog(pagecontent);

//var title = pageevaluate(function() {

// return documenttitle;//示范下如何使用页面的jsapi去 *** 作页面的 >

以上就是关于selenium webdriver 怎么抓页面的js error全部的内容,包括:selenium webdriver 怎么抓页面的js error、如何获取PhantomJS打开网页时加载的JS资源、通过ajax的方式能有效防止网页数据被采集吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10130694.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存