【问题标题】:evaluating only javascript elements within a page using phantomjs使用 phantomjs 仅评估页面中的 javascript 元素
【发布时间】:2013-12-12 19:22:09
【问题描述】:

我想评估本网站上的 javascript 链接:

http://www.egypt.gov.eg

例如,我有这个元素:

<li class="language">
                        <a id="ctl00_btnLang" href="javascript:__doPostBack('ctl00$btnLang','')">English </a>
                        <img src="/CSS/images/langArwEn.gif" alt="Language Arrow" /></li>

所以,我尝试使用 phantomjs 来评估它,使用 this code:

var page = require('webpage').create();  
var fs = require('fs'),
    system = require('system');

page.open('http://www.egypt.gov.eg', function (status) {
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
        var p = page.evaluate(function () {
            return document.getElementsByID('html')[0].innerHTML
        });
        fs.write('out.htm', p, 'w');
        console.log(p);
    }

    phantom.exit();
});

但它不会评估 html,它只是按原样返回它。那么有没有办法使用 phantomjs 评估整个页面的 html,有没有办法挑选出需要一个一个评估的 javascript 元素?

【问题讨论】:

  • 我不太明白你的目的。你的意思是自动执行__doPostBack然后抓取页面?
  • 是的,这就是我基本需要的
  • 一般来说,如果我在href中找到一段javascript,如何处理它以检索它指向的页面?
  • 直接在page.evaluate中调用脚本即可。如果您只需要获取网站的英文版,您可以直接访问此网址:egypt.gov.eg/english/home.aspx
  • 查看phantomjs cross-domain request?

标签: javascript html phantomjs


【解决方案1】:

第一个问题是“评估”页面上的 javascript 链接是什么意思...你希望 PhantomJS 点击它们吗?

页面自动化的文档在这里:
http://phantomjs.org/page-automation.html

要点击这个特定的链接,你可以这样做:

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

page.open('http://www.egypt.gov.eg', function (status) {
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
        var p = page.evaluate(function () {
            document.getElementById('ctl00_btnLang').click()
        });
    }
    phantom.exit();
});

...但这会将浏览器发送到一个新的 url,我不确定在这种情况下你的 PhantomJS 页面对象会发生什么。

您要单击该页面上的所有 javascript 链接并获取每个加载的新 HTML 页面的内容吗?

似乎使用 CasperJS 会更容易“CasperJS 是 PhantomJS 的导航脚本和测试实用程序”
http://docs.casperjs.org/

查看此处的示例代码,该代码从起始网址数组中抓取并跟踪链接:
https://github.com/n1k0/casperjs/blob/master/samples/dynamic.js

【讨论】:

    猜你喜欢
    • 2016-12-23
    • 1970-01-01
    • 2020-08-12
    • 2021-07-08
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多