网页上有部分内容在网页源代码中找不到,如何找出该部分内容的真实网址?【有图】

oo2461166893 2014-05-03 08:34:54
以这个网页http://me.qidian.com/authorIndex.aspx?id=69177为例,


A部分和B部分对应的源代码都可以找到,如下两图所示





然后就是C部分的源代码怎么都找不到,我用IE、Chrome、Firefox都查看过,都找不出这部分对应的源代码。我曾经想过也许是这个网页通过脚本调用的方式获取了这部分对应的源代码后再显示出来,但是我没有接触过网页脚本这方面的知识,无法证实自己的猜测。
请各位好心人帮帮忙找出这部分内容的真实网址,先行谢过了。
...全文
27219 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bai_lin369 2015-01-26
  • 打赏
  • 举报
回复
怎么获取不到东西呢,pDoc为空,直接跳过去了。
oo2461166893 2014-05-29
  • 打赏
  • 举报
回复
引用 9 楼 zengshirong 的回复:
可以分享下么,在VC++中使用Web Browser控件编程实现获取ajax内容的方法?
上面漏了一句代码,在
str_text = bstr;
后面,一定要加上这句
SysFreeString(bstr);
oo2461166893 2014-05-28
  • 打赏
  • 举报
回复
引用 9 楼 zengshirong 的回复:
可以分享下么,在VC++中使用Web Browser控件编程实现获取ajax内容的方法?
假设m_browser是CWebBrowser2类型的变量,m_url是包含有ajax内容的网址,str_text是CString变量,执行如下代码
	VARIANT flag;
	flag.vt = VT_I4;
	flag.iVal = navNoHistory | navNoReadFromCache | navNoWriteToCache;
	m_browser.Navigate(m_url, &flag, NULL, NULL, NULL);
	m_browser.put_Silent(TRUE);
	MSG msg;
	DWORD dwTimeStarted = ::GetTickCount();
	for (int i = 0; i != 3; ++i)
	{
		while (1000 > ::GetTickCount() - dwTimeStarted)
		{
			if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
		}
	}
	BSTR bstr;
	HRESULT hResult = S_OK;
	IHTMLElement* pElement1 = NULL;
	IHTMLElement* pElement2 = NULL;
	IHTMLDocument2* pDoc = (IHTMLDocument2*)m_browser.get_Document();
	if (NULL != pDoc)
	{
		hResult = pDoc->get_body(&pElement1);
		if (S_OK == hResult && NULL != pElement1)
		{
			hResult = pElement1->get_parentElement(&pElement2);
			if (S_OK == hResult && NULL != pElement2)
			{
				hResult = pElement2->get_outerHTML(&bstr);
				if (S_OK == hResult)
				{
					pDoc->Release();
					pDoc = NULL;
					pElement1->Release();
					pElement1 = NULL;
					pElement2->Release();
					pElement2 = NULL;
				}
			}
		}
	}
	else
	{
		if (NULL != pDoc)
		{
			pDoc->Release();
			pDoc = NULL;
		}
		if (NULL != pElement1)
		{
			pElement1->Release();
			pElement1 = NULL;
		}
		if (NULL != pElement2)
		{
			pElement2->Release();
			pElement2 = NULL;
		}
		return;
	}
	str_text = bstr;
如果执行成功,str_text就是m_url对应网页源代码,并且包含了ajax内容。 注意: 1、一定要执行
pDoc->Release();
pDoc = NULL;
pElement1->Release();
pElement1 = NULL;
pElement2->Release();
pElement2 = NULL;
否则每次执行m_browser.Navigate(....)后,都会有严重的内存泄漏!!! 2、一定要在m_browser.Navigate(....)后让程序暂时执行一小段时间(比如3秒、4秒、5秒),这是因为Navigate()函数会立即返回,同时Web Browser控件才开始加载网页,接着代码会向下执行,如果不预留足够的时间,有非常大的概率导致m_browser.get_Document()执行失败,也就无法获取网页源代码。而代码段
	MSG msg;
	DWORD dwTimeStarted = ::GetTickCount();
	for (int i = 0; i != 3; ++i)
	{
		while (1000 > ::GetTickCount() - dwTimeStarted)
		{
			if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
		}
	}
就是让程序暂停执行了大约3秒钟。更多有关该代码段,请搜索关键词“VC版DoEvents”。该代码段有两个缺点:在暂停时间内程序占用的CPU资源会升高很多、在暂停时间内导致程序不执行代码块BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)。 3、用定时器也可以达到让程序暂停执行一小段时间的效果,并且没有上述两个缺点。如何使用定时器,请搜索网上的教程。
zengshirong 2014-05-26
  • 打赏
  • 举报
回复
可以分享下么,在VC++中使用Web Browser控件编程实现获取ajax内容的方法?
Go 旅城通票 2014-05-05
  • 打赏
  • 举报
回复
防止ajax在ie下url相同的get缓存,可以看这个:http://bbs.csdn.net/topics/310120750
Go 旅城通票 2014-05-05
  • 打赏
  • 举报
回复
1,放置ajax在ie下的get缓存 2,js有Math.random()生成随机数 3,看1 直接访问是别人加了来源判断什么的,防止找到借口进行采集什么的
oo2461166893 2014-05-05
  • 打赏
  • 举报
回复
引用 3 楼 showbo 的回复:
ajax动态加载的。。js动态设置的内容是无法从源代码中找到的,除非数据放到对应的js文件或者script块中,ajax动态读取的需要开发工具进行监视才能找到
我注意到你回复的图中有这个类型的链接http://me.qidian.com/Ajax/Index.ashx?ajaxMethod=getUserTwitter&userId=5675060&pageType=0&twitterType=-1&pageIndex=1&pageSize=20&groupId=0&random=0.40950198591369635(random的值有所不同),用Firefox打开该链接,提示 为什么会这样? 还有: 1、加上这个random在URL后面有什么作用? 2、这个random是如何产生的?由http://me.qidian.com对应的服务器产生的吗? 3、是不是这个random在某个时刻恰好对了就能避免“XML 解析错误:未找到元素”?
oo2461166893 2014-05-05
  • 打赏
  • 举报
回复
已找到获取ajax内容的方法,就是在VC++中使用Web Browser控件编程实现。 通过曲折方法获取到了这部分的源码,有没有真实网址都无所谓了。 结贴。
oo2461166893 2014-05-05
  • 打赏
  • 举报
回复
引用 6 楼 showbo 的回复:
防止ajax在ie下url相同的get缓存,可以看这个:http://bbs.csdn.net/topics/310120750
谢谢你的解答。我再问一个问题:其实我就是想编写个exe程序来采集C部分对应的文本的,你说我在这个程序中加上一些必要的参数后通过网络访问能不能采集到呢?
Go 旅城通票 2014-05-04
  • 打赏
  • 举报
回复
ajax动态加载的。。js动态设置的内容是无法从源代码中找到的,除非数据放到对应的js文件或者script块中,ajax动态读取的需要开发工具进行监视才能找到


oo2461166893 2014-05-03
  • 打赏
  • 举报
回复
我还测试过了,无论有没有登录http://me.qidian.com/、有没有启用广告拦截类的扩展、有没有启用安全软件,都找不出这部分对应的源代码。

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧