[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] [已解决]vbs如何获取网页元素内容

本帖最后由 WindCat 于 2017-5-24 21:17 编辑

原标题:请问该如何用vbs获取或抓取一个会跳转且内容为css或可能是js加解密的网页内容信息?
https://privnote.com/
随手找网站练习抓取内容就遇到了个这么个难题
可以点击显示选项---勾选不要在显示和销毁笔记时确认 (经典 Privnote 行为)。
来使得直接显示内容页面(只是少了个确认按钮)
-----------------------------
在最初发这个帖子之前,我只是一个会拿着
http://www.bathome.net/thread-44171-1-1.html中的Set html = CreateObject("microsoft.xmlhttp")套用采集网页信息的菜鸡
然后就正常的遇到了会跳转和需要cookie的页面了
于是就百度找了一堆方案都是用CreateObject("InternetExplorer.Application") 的
然而,win10下用这个会报错,百度没找到,G+都是英文,我英语太烂没找到解决办法。
于是我就找了下面一些文章看...没什么收获.
最后意外发现用管理员权限启用vbs就能正常工作了
于是就开始学如何定位元素
然后依照
http://www.bathome.net/viewthread.php?tid=36406&from=favorites
的方法解决了问题(完工代码见9#http://www.bathome.net/redirect. ... id=44245&pid=199734
最后感谢
523066680的努力(虽然只是一时兴起,不过还是对我起到了提醒作用,让我想到去看看IE下是否真的有加载一些东西
-----------------------------
找了几篇资料...从十二点查到下午5点...今天就到这里了.
还请各位朋友看看有什么收获,然后来交流一下.

使用正确版本的XMLHTTP
http://demon.tw/programming/the-right-version-of-xmlhttp.html
VBS发送带Cookie的HTTP请求
http://demon.tw/programming/vbs-http-cookie.html
Msxml2.XMLHTTP Msxml2.ServerXMLHTTP与缓存
http://demon.tw/programming/msxm ... rxmlhttp-cache.html
再谈Msxml2.XMLHTTP、Msxml2.ServerXMLHTTP与缓存
http://demon.tw/programming/msxm ... tp-cache-again.html
VBS伪造HTTP-REFERER
http://demon.tw/programming/vbs-http-referer.html
VBS伪造HTTP-REFERER(二)
http://demon.tw/programming/vbs-http-referer-two.html


vbs 解析html文档的方法(htmlfile)
http://www.codeweblog.com/vbs-%E ... %E6%B3%95-htmlfile/

不要贴这个j851的网站的链接。那个是一个垃圾网站。上面的内容全是盗抓别人的。

你需要学一下抓包看http是怎么工作的。
http://www.cnblogs.com/dudu837/p/4323040.html
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 2# codegay

已利用搜索引擎找到源站并更替链接...
请问下下面这个哪里错了。。。
(如何用)InternetExplorer.Application获取网页源代码
  1. dim ie,url,MyStream
  2. url="http://www.bathome.net"
  3. if url&"a"<>"a" then
  4. Set ie=WScript.CreateObject("InternetExplorer.Application")
  5. ie.visible=true
  6. ie.navigate url
  7. msgbox ""
  8. Do
  9. Wscript.Sleep 2000
  10. Loop Until ie.ReadyState=4
  11. Set MyStream=CreateObject("Adodb.Stream")
  12. MyStream.Type = 1
  13. MyStream.Open
  14. MyStream.Write ie.document.documentElement.outerHTML
  15. MyStream.SaveToFile "C:\xxx.html"
  16. Msgbox "保存成功"
  17. IE.Quit
  18. End if
复制代码
1

评分人数

    • CrLf: 棒棒哒PB + 6 技术 + 1

TOP

@CrLf
那个...我并没有解决自己的问题...执行会遇到如下错误
---------------------------
Windows Script Host
---------------------------
脚本:        G:\Datas\Source_code\vbs登录网页\test-副本.vbs
行:        14
字符:        2
错误:        参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
代码:        800A0BB9
源:         ADODB.Stream

---------------------------
确定   
---------------------------

TOP

本帖最后由 523066680 于 2017-5-24 20:45 编辑

POST /legacy/
&data=U2FsdGVkX184KVBoLvcq2B%2FIhRIXbzDEyjOlkQ6Z%2FFk%3D%0A
&has_manual_pass=false
&duration_hours=0
&dont_ask=true
&data_type=T
&notify_email=xxxx@xxx.com
&notify_ref=

dont_ask 就是那个选项了


字符串加密的部分还在探索,我的原文是 abc,在提交的列表中变成:
U2FsdGVkX1%2Fcj0LhMKHyjkidrfBqLybT5BUBPhvLDks%3D%0A
转字符:
U2FsdGVkX1/cj0LhMKHyjkidrfBqLybT5BUBPhvLDks=
base64解码:
Salted__܏BᰡHj/&Ӥ>ˎK

Salted_ 开头好像是 OpenSSL 的风格?
看 js 疑是 AES 加密?

密钥好像是随机生成
common.js:
var common=function()
{
    var auto_pass_length=9;
    var auto_pass_chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
    var encrypt=function(data,password)
    {
        return GibberishAES.enc(data,password)
    }
   
    var decrypt=function(data,password)
    {
        return GibberishAES.dec(data,password)
    }

    var make_password=function()
    {
        var length=auto_pass_length;
        var chars=auto_pass_chars;
        var str="";
        for(var i=0; i<length; i++)
        {
            pos=Math.floor(Math.random()*chars.length);
            str+=chars.charAt(pos);
        }
        return str;
    }

TOP

本帖最后由 WindCat 于 2017-5-24 20:07 编辑

回复 5# 523066680


    先停一停,文本框里解密内容为test时,定位输入栏元素,内容为U2FsdGVkX18QQ6eYCCJ+4YGn5oA9wrQgebRu+1XnrIM=,改变后会直接如明文覆盖应用到页面
但是,我发现了一个选择文本按钮,能不能用vbs调用WScript.CreateObject("InternetExplorer.Application") 后台打开IE窗体然后点击选择文本按钮然后复制选择内容?
或者说给按钮元素增加一个复制到剪贴板的动作

TOP

python 有已经做好的库。
https://github.com/intelligentguy/pyPrivnote
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

本帖最后由 523066680 于 2017-5-24 20:46 编辑

啊哈,加密部分用openssl穷举测试,试出来了

如果提交后得到的地址是:
https://privnote.com/jdMjyawp#n03p9QITx
则 n03p9QITx 是解密密钥,加密方式是 aes256。

加密过程是:
原文 -> aes256 + 随机密钥 -> 转 base64 -> 特殊字符转URL编码

随机密钥就在 生成的链接地址的末尾部分(#字符后面)
2

评分人数

TOP

本帖最后由 pcl_test 于 2017-5-25 00:28 编辑

回复 8# 523066680


    辛苦了;w;虽然我绝对不会用这种方式读页面内容
获取加密链接
  1. Set ie = CreateObject("InternetExplorer.Application")
  2. ie.Visible = true
  3. ie.navigate "https://privnote.com/#dont_ask"
  4. On Error Resume Next
  5. Set btn=ie.Document.getElementByID("encrypt_note")
  6. Do while Err
  7.     On Error Resume Next
  8.     Set btn=ie.Document.getElementByID("encrypt_note")
  9.     WSH.Sleep 500
  10. Loop
  11. ie.Document.getElementByID("note_raw").value="需加密的内容"
  12. btn.click()
  13. Do while ie.Document.getElementByID("note_link_input").value = ""
  14.     WSH.Sleep 500
  15. Loop
  16. msgbox ie.Document.getElementByID("note_link_input").value
  17. ie.quit
复制代码
获取解密内容
  1. Set ie = CreateObject("InternetExplorer.Application")
  2. ie.Visible = true
  3. ie.navigate "https://privnote.com/3OZyRIdB#eCqP3Bxu5"
  4. On Error Resume Next
  5. Set textarea=ie.Document.getElementByID("note_contents")
  6. Do while Err
  7.     On Error Resume Next
  8.     Set textarea=ie.Document.getElementByID("note_contents")
  9.     WSH.Sleep 500
  10. Loop
  11. Do while textarea.value = ""
  12.     WSH.Sleep 500
  13. Loop
  14. msgbox textarea.value
  15. ie.quit
复制代码
直接这样就OK了(不知道为什么Chrome浏览器访问时元素内容是加密后的,而IE是直接的解密内容...害我折腾一个下午)
1

评分人数

TOP

本帖最后由 523066680 于 2017-5-24 21:06 编辑

回复 9# WindCat


    你目标是获取提交后链接内的内容,我前面没看到你的需求是要做post 部分还是 get 部分。
只是凭兴趣在探索密文建立的方式,纯属自娱自乐。
1

评分人数

    • yu2n: 鉆研才能進步~技术 + 1

TOP

回复 10# 523066680


    樓主只要結果,不管速度。

    Chrome 調試門檻高,IE接口簡單粗暴。

    1秒與4秒,這中間3秒,嫌麻煩,樓主大可不要。
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

本帖最后由 523066680 于 2017-5-25 12:05 编辑

回复 11# yu2n


    网络方面一直是我的短板,这个问题是很好的锻炼机会。

TOP

本帖最后由 523066680 于 2017-5-25 12:01 编辑

Perl 获取保存7天的笔记内容,示例。几个模块交叉使用,感觉有些凌乱~

use MIME::Base64;
use Crypt::CBC;
use LWP::UserAgent;

my $link = "https://privnote.com/tfXKuLB0#OmbQnPRgb";
$link=~/\/(\w+)#(\w+)/;
my ($noteid, $key) = ($1, $2);

my $req = HTTP::Request->new(GET => "https://privnote.com/hidden#$key");
$req->header('Cookie' => "manual_locale=zh_CN;note_id=$noteid");

my $ua = LWP::UserAgent->new();
my $res = $ua->request( $req );

my $content = $res->content();

my $aes = Crypt::CBC->new(
    -key    => $key,
    -cipher => "Crypt::OpenSSL::AES"
);

if ($content =~ /textarea[^>]+>([^<]+)</s)
{
    $cipher = $1;
    $cipher =~s/\r?\n//g;
    print $aes->decrypt( decode_base64( $cipher ) );
}
1

评分人数

TOP

返回列表