idler1984 发表于 2011-9-6 21:30

[死程福利] 图片另存为?弱爆了

EH收本用,死程向福利,自己下载去编译
不会编译自己学去,软妹PM,面授可
非死程慎用,bug一大堆,不会修的话拿去也是白拿,软妹可提交bug
程序做的无非就是这些事情:打开IE,等图片下载,保存图片,点击图片翻到下一页,循环往复至最后一页结束。没有任何多余的请求发到服务器

严重缺陷:运行期间会占用剪贴板,建议丢虚机里搞

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Threading;
using System.IO;
using mshtml;
using SHDocVw;
using WatiN.Core;
using WatiN.Core.Native;
using WatiN.Core.Native.InternetExplorer;
using WatiN.Core.Native.Windows;
namespace EHentaiDownloader
{
    class Program
    {
      static string RemoveInvalidPathChars(string originalPath)
      {
            string invalidChars = new string(Path.GetInvalidPathChars());
            string newPath = originalPath;
            foreach (char c in invalidChars)
            {
                newPath = newPath.Replace(c.ToString(), "");
            }
            return newPath;
      }
      static string GetScriptContent(int i)
      {
            string scriptContent =
@"var div = document.images[" + i.ToString() + @"];
div.contentEditable = 'true';
var controlRange;
if (document.body.createControlRange) {
controlRange = document.body.createControlRange();
controlRange.addElement(div);
controlRange.execCommand('Copy');
}
div.contentEditable = 'false';";
            return scriptContent;
      }
      
      static void Main(string[] args)
      {
            const int sizeLimit = 500;
            const int retryInterval = 500;
            const int retryBeforeRefresh = 120 * 1000 / retryInterval;
            int pageIndex;
            var ie = new IE("about:blank");
            if (args.Length == 2 && string.Compare("debug", args) == 0)
            {
                // DO NOTHING
            }
            else
            {
                ie.ShowWindow(NativeMethods.WindowShowStyle.Hide);
            }
            if (args.Length != 1 && args.Length != 2)
            {
                // Wrong parameters
                return;
            }
            else
            {
                ie.GoTo(args);
            }
            try
            {
                string[] split = ie.Url.Split(new Char[] { '-', '_', ',' });
                pageIndex = int.Parse(split);
            }
            catch (Exception ex)
            {
                pageIndex = 1;
            }
            string lastUrl = ie.Url;
            string dirTitle = ie.ElementsWithTag("h1").OuterText;    // The first H1 is the title
            if (dirTitle.Length == 0) { return; }
            // Create/Change working directory here
            try
            {
                dirTitle = RemoveInvalidPathChars(dirTitle);
                if (!Directory.Exists(dirTitle))
                {
                  Directory.CreateDirectory(dirTitle);
                }
                Directory.SetCurrentDirectory(dirTitle);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(dirTitle);
                return;
            }
            
            do
            {
                int imgCount = ie.Images.Count;
                int nextImage;
                nextImage = -1;
                for (int i = 0; i < imgCount; i++)
                {
                  string scriptContent = GetScriptContent(i);
                  bool downloadFinished = false;
                  IDataObject data;
                  int retryTimes = 0;
                  while (!downloadFinished)
                  {
                        ie.RunScript(scriptContent);
                        data = Clipboard.GetDataObject();
                        if (data.GetDataPresent(DataFormats.Bitmap))
                        {
                            System.Drawing.Image image = (System.Drawing.Image)data.GetData(DataFormats.Bitmap, true);
                            try
                            {
                              if (image.Height > sizeLimit && image.Width > sizeLimit)
                              {
                                    image.Save(pageIndex.ToString("D3") + ".png", System.Drawing.Imaging.ImageFormat.Png);
                                    Console.WriteLine("Page #" + pageIndex.ToString() + " downloaded.");
                                    pageIndex++;
                                    nextImage = i;
                                    downloadFinished = true;
                                    break;
                              }
                              else
                              {
                                    downloadFinished = true;
                              }
                            }
                            catch (Exception ex)
                            {
                            }
                        }
                        if (!downloadFinished)
                        {
                            Thread.Sleep(retryInterval);
                            retryTimes++;
                            if (retryTimes >= retryBeforeRefresh)
                            {
                              ie.Refresh();
                              retryTimes = 0;
                            }
                        }
                  }
                }
                if (nextImage != -1)
                {
                  ie.Images.Click();
                }
                if (string.Compare(ie.Url, lastUrl) == 0) break;
                lastUrl = ie.Url;
            } while (true);
            ie.Close();
      }
    }
}

19407千里 发表于 2011-9-6 22:15

玩玩hv会有多难

vleev 发表于 2011-9-6 22:26

微软出过类似功能的软件,可以作为ie的插件来使用,可以全部保存页面中的图片,flash,可能还有视频和mp3,软件名字我忘了,就记得界面是橘黄色的,而且试用版有时间限制。
还有一个笨球的PhotoFamily 3.0,这是个相册制作软件,但我没用过它做相册。安装之后会在ie右键里添加发送所有图片至储存柜,可以设定小于多少的图片不要,基本保证收的都是你想要的。唯一缺点一次最多一百张

idler1984 发表于 2011-9-6 22:28

引用第1楼19407千里于2011-09-06 22:15发表的:
玩玩hv会有多难 images/back.gif


不难,费时间

ahsammas 发表于 2011-9-6 22:29

ViewPAGE路过

vuder 发表于 2011-9-6 22:53

Cidolfus 发表于 2011-9-6 22:55

我.net用的少你们不要骗我,这是c#?

ov_efly 发表于 2011-9-6 23:00

原来想写脚本解决的
现在戒断中 不写了

zntempest 发表于 2011-9-6 23:04

看完之后感觉还是老老实实地玩HV好了

zdian 发表于 2011-9-6 23:15

引用第5楼vuder于2011-09-06 22:53发表的:
有E-H下载器在么,不用额外再弄一个了吧 images/back.gif

有馬たくや 发表于 2011-9-7 00:33

以前我写过eh的下载器,自己用的时候发现这网站有流量限制的.....还不如自己想办法弄积分

ov_efly 发表于 2011-9-7 01:26

引用第10楼有馬たくや于2011-09-07 00:33发表的:
以前我写过eh的下载器,自己用的时候发现这网站有流量限制的.....还不如自己想办法弄积分 images/back.gif


还是玩那个游戏最好
买HP实在
当然 游戏自动化
也是个很好的选择

fumeflow 发表于 2011-9-7 07:51

有好心人给个HV的全称么

might 发表于 2011-9-7 09:36

台球论坛网友 发表于 2011-9-7 09:53

鸡蛋灌饼 发表于 2011-9-7 10:57

话说那个Hentai@Home到底实不实用……

灵魂使者 发表于 2011-9-7 11:29

易很太下载器经常无法下载,中途也会出现下不完整等情况

ov_efly 发表于 2011-9-7 11:46

引用第15楼鸡蛋灌饼于2011-09-07 10:57发表的:
话说那个Hentai@Home到底实不实用…… images/back.gif

有上传速度要求的
直接就没戏了
只剩下那游戏

花剑酒 发表于 2011-9-7 11:58

同样的功能,写个脚本不断request然后取data不就得了。

搞浏览器点击太笨了。

伪码:
下载线程体(image_url):
      request(image_url)
      data=response.data//取返回体
         f=open(file)
         f.write(data)//存文件
爬虫体(url):
      request(page_url)
      dom=response.data//取dom
      dom=xpath.parse(dom)//用xpath解析(怎么使和语言有关)
      imgNodes=dom.select('//img')//取img节点(xpath语句怎么写看xpath的文档)
      for imgNodes in imgNodes:
            启动下载线程(imgNodes.value)
      linkNodes=dom.select('//a')//找下一页上一页节点(xpath语句具体怎么写看页面)
      for linkNode in linkNodes:
            爬虫(linkNode.value)

这比楼主的那个好使的多。
楼主的解决方案……不吐槽……不吐槽……我不能吐槽……

花剑酒 发表于 2011-9-7 12:00

同样的功能,写个脚本不断request然后取data不就得了。

搞浏览器点击太笨了。

伪码:
下载线程体(image_url):
      request(image_url)
      data=response.data//取返回体
         f=open(file)
         f.write(data)//存文件
爬虫体(url):
      request(page_url)
      dom=response.data//取dom
      dom=xpath.parse(dom)//用xpath解析(怎么使和语言有关)
      imgNodes=dom.select('//img')//取img节点(xpath语句怎么写看xpath的文档)
      for imgNodes in imgNodes:
            启动下载线程(imgNodes.value)
      linkNodes=dom.select('//a')//找下一页上一页节点(xpath语句具体怎么写看页面)
      for linkNode in linkNodes:
            爬虫(linkNode.value)

这比楼主的那个好使的多。
楼主的解决方案……不吐槽……不吐槽……我不能吐槽……

idler1984 发表于 2011-9-7 12:24

引用第19楼花剑酒于2011-09-07 12:00发表的:
同样的功能,写个脚本不断request然后取data不就得了。

搞浏览器点击太笨了。

伪码:
....... images/back.gif


IE automation的好处是完全模拟手工操作,理论上没有任何的footprint,如果蛋疼再加个随机delay的话。从这个层面上说,爬虫

Rude 发表于 2011-9-7 12:37

爬虫也可以模拟浏览器,改改header就行了,随机delay也很容易。

不过感觉是在干坏事。我的纱布爬虫不但自曝家门,还在别人的那里留下“如有打扰,请联系xxx@xxx.com”之类的蛋疼信息

idler1984 发表于 2011-9-7 12:41

引用第21楼Rude于2011-09-07 12:37发表的:
爬虫也可以模拟浏览器,改改header就行了,随机delay也很容易。

不过感觉是在干坏事。我的纱布爬虫不但自曝家门,还在别人的那里留下“如有打扰,请联系xxx@xxx.com”之类的蛋疼信息 images/back.gif


嘛,IE automation的好,谁用谁知道

badmouse 发表于 2011-9-7 12:49

复制 粘贴另存为.java

乃绘美 发表于 2011-9-7 12:51

EH批量容易RP

idler1984 发表于 2011-9-7 13:27

引用第23楼badmouse于2011-09-07 12:49发表的:
复制 粘贴另存为.java images/back.gif


这真的是c#

char1st 发表于 2011-9-7 13:47

拜拜 发表于 2011-9-7 15:12

IF 我是软妹, THEN 一定能很快学会编程

mdk11223344 发表于 2011-9-7 17:12

这东西不如写教程教别人玩HV,注册后玩个把星期,每天十分钟就有上万C了。。。
页: [1]
查看完整版本: [死程福利] 图片另存为?弱爆了