淘宝网的链接,用后台ele.click,返回的链接没有spm参数(用来跟踪 买家来源的)
右键下任意网址也会直接变成带spm的网址,应该有在js中做了转换,可载入的js实在太多了,有哪位老大有心得帮忙指点下怎么处理,看看是换个思路,或者是直接取坐标用鼠标点?
后来我用 鼠标模拟点击(先通过获取element位置,然后滚动到 可视范围,用mouse_event模拟了鼠标的down/up事件)现在是能够进行跳转到宝贝的页面,不过还是没有带上SPM参数。
我感到非常奇怪,因为都是模拟了鼠标的行为,那么应该JS的脚本应该要跑到啊,之前有人也问到这个问题
http://bbs.csdn.net/topics/390587900
http://bbs.csdn.net/topics/390588300
其中这个哥们提到的这点非常有用
他在某功能块分一个 data-spm, 在a 标签 在mousedown 时加上 本区的 data-spm 还有其它值 但是我不知道应该怎么样才能触发脚本,添加上这个参数。非常感谢啊,各位大侠们。
右键下任意网址也会直接变成带spm的网址,应该有在js中做了转换,可载入的js实在太多了,有哪位老大有心得帮忙指点下怎么处理,看看是换个思路,或者是直接取坐标用鼠标点?
后来我用 鼠标模拟点击(先通过获取element位置,然后滚动到 可视范围,用mouse_event模拟了鼠标的down/up事件)现在是能够进行跳转到宝贝的页面,不过还是没有带上SPM参数。
我感到非常奇怪,因为都是模拟了鼠标的行为,那么应该JS的脚本应该要跑到啊,之前有人也问到这个问题
http://bbs.csdn.net/topics/390587900
http://bbs.csdn.net/topics/390588300
其中这个哥们提到的这点非常有用
他在某功能块分一个 data-spm, 在a 标签 在mousedown 时加上 本区的 data-spm 还有其它值 但是我不知道应该怎么样才能触发脚本,添加上这个参数。非常感谢啊,各位大侠们。
在这些函数中找找。
理论上淘宝可以根据spm参数提供的点击模式,来判断你是不是机器人。所以真正要模拟的话,应该是模拟人的网页浏览行为、习惯。只是要模拟出spm参数的话,用模拟鼠标点击(mouse_event)就可以了。
A.fireEvent('onmousedown')//算出spm ,
A.click() //打开连接
Cursor.Position = new Point(clientPoint.X, clientPoint.Y);
//Thread.Sleep(1000);
mouse_event(0x00000002, 0, 0, 0, UIntPtr.Zero); /// left mouse button down
mouse_event(0x00000004, 0, 0, 0, UIntPtr.Zero); /// left mouse button up
#c的控件我没用过,不过IE控件的属性都一样你参考下
webbrowser.document.parentWindow.execScript(" alert('ok') ","javascript")
你先确认下 加入JS有没有执行到 ,再看下A元素有没有取到
这个问题如果是用webbrowser 那最好办, 我刚好前几天写了一个,运行良好,量子数据可以显示,并且可实现不重复的访客。我是用易语言实现的,下面简单说说这个过程:
在页面 http://www.taobao.com/ 自动完成关键字的填表,然后找到搜索的button元素,然后模拟点击
来到搜索结果页面,枚举查找 a元素,可读取href属性的值是包含自己的宝贝ID来判断是否为想要的链接,找到宝贝链接后,直接模拟点击即可跳到宝贝页面,并且是带spm参数的。我在在测试中最快平均9.6秒可模拟一次搜索进店不过这是使用webbrowser 实现的,
后来想改为http get方式来实现,虽然抓包分析后都完成了对 cache 与 spm-cnt 的值,但却未能实现旺子数据的有效显示。还望高手指点,本人QQ:1294332623
在模拟淘宝搜索的过程中一些参数是通过js计算得到的,通过抓包分析,发现这个js最关键:
http://a.tbcdn.cn/s/fdc/??spm.js,spmact.js?v=131014bcache与spm-cnt都是在这里计算的:cache其实是一个7位随机码: Math.floor(Math.random()*268435456).toString(16)
spm-cnt的值: "a230r.1.0.0." + y()这个y返回六位的随机码:
function y()
{var a1="g_aplus_pv_id",a3="",a2="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
if(!aw[a1])
{
while(a3.length<6)
{
a3+=a2.substr(Math.floor(Math.random()*62),1)
}
aw[a1]=a3}return aw[a1]
}