[死程福利] 图片另存为?弱爆了
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();
}
}
}
玩玩hv会有多难 微软出过类似功能的软件,可以作为ie的插件来使用,可以全部保存页面中的图片,flash,可能还有视频和mp3,软件名字我忘了,就记得界面是橘黄色的,而且试用版有时间限制。
还有一个笨球的PhotoFamily 3.0,这是个相册制作软件,但我没用过它做相册。安装之后会在ie右键里添加发送所有图片至储存柜,可以设定小于多少的图片不要,基本保证收的都是你想要的。唯一缺点一次最多一百张 引用第1楼19407千里于2011-09-06 22:15发表的:
玩玩hv会有多难 images/back.gif
不难,费时间 ViewPAGE路过 我.net用的少你们不要骗我,这是c#? 原来想写脚本解决的
现在戒断中 不写了 看完之后感觉还是老老实实地玩HV好了 引用第5楼vuder于2011-09-06 22:53发表的:
有E-H下载器在么,不用额外再弄一个了吧 images/back.gif
求 以前我写过eh的下载器,自己用的时候发现这网站有流量限制的.....还不如自己想办法弄积分 引用第10楼有馬たくや于2011-09-07 00:33发表的:
以前我写过eh的下载器,自己用的时候发现这网站有流量限制的.....还不如自己想办法弄积分 images/back.gif
对
还是玩那个游戏最好
买HP实在
当然 游戏自动化
也是个很好的选择 有好心人给个HV的全称么 话说那个Hentai@Home到底实不实用…… 易很太下载器经常无法下载,中途也会出现下不完整等情况 引用第15楼鸡蛋灌饼于2011-09-07 10:57发表的:
话说那个Hentai@Home到底实不实用…… images/back.gif
有上传速度要求的
直接就没戏了
只剩下那游戏 同样的功能,写个脚本不断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)
这比楼主的那个好使的多。
楼主的解决方案……不吐槽……不吐槽……我不能吐槽…… 同样的功能,写个脚本不断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)
这比楼主的那个好使的多。
楼主的解决方案……不吐槽……不吐槽……我不能吐槽…… 引用第19楼花剑酒于2011-09-07 12:00发表的:
同样的功能,写个脚本不断request然后取data不就得了。
搞浏览器点击太笨了。
伪码:
....... images/back.gif
IE automation的好处是完全模拟手工操作,理论上没有任何的footprint,如果蛋疼再加个随机delay的话。从这个层面上说,爬虫 爬虫也可以模拟浏览器,改改header就行了,随机delay也很容易。
不过感觉是在干坏事。我的纱布爬虫不但自曝家门,还在别人的那里留下“如有打扰,请联系xxx@xxx.com”之类的蛋疼信息 引用第21楼Rude于2011-09-07 12:37发表的:
爬虫也可以模拟浏览器,改改header就行了,随机delay也很容易。
不过感觉是在干坏事。我的纱布爬虫不但自曝家门,还在别人的那里留下“如有打扰,请联系xxx@xxx.com”之类的蛋疼信息 images/back.gif
嘛,IE automation的好,谁用谁知道 复制 粘贴另存为.java EH批量容易RP 引用第23楼badmouse于2011-09-07 12:49发表的:
复制 粘贴另存为.java images/back.gif
这真的是c# IF 我是软妹, THEN 一定能很快学会编程 这东西不如写教程教别人玩HV,注册后玩个把星期,每天十分钟就有上万C了。。。
页:
[1]