这一篇将说明如何使用C#和WPF浏览器控件来完成淘宝自动搜索,翻页,自动点击的操作


首先说明下,我在实现过程中使用的控件,一个是浏览器WebBrowser,一个是按钮Button,还有单选按钮RadioButton,以及多选CheckBox,下文代码中的reload函数是重新加载页面的函数。

目录

1.自动填写搜索栏

2.自动点击搜索按钮的实现

3.翻页的实现

4.匹配名称和ID并点击商品


这个软件设计的手动操作部分如下

1.自动填写搜索栏

先是实例化HTMLDocument,HTMLDocument类会获取目前浏览器控件加载好的网页文档,提供之后IHTMLElementCollection进行元素查找和操作。

尽管这部分函数我设计为按钮触发,但为了防止没有加载好的时候就获取,需要先等待网页加载完毕

if (webbrowser.IsLoaded != true){InfoAdd("搜索前请先等待页面完成加载");return;}

其中webbrowser是我们WPF的浏览器控件名称,如果加载完成,那么可以实例化HTMLDocument

HTMLDocument doc = webbrowser.Document as HTMLDocument;

接下来我们可以看看淘宝的主页,顶部的搜索栏的HTML文本结构,这里可以使用浏览器调试模式查看,点击F12即可

可以看到,标签是input,因此,接下来我们要获取网页中所有的input标签,并且遍历搜索,找到搜索文本的输入框,并且将我需要的内容输入进去

//实例化元素搜集用途的类,然后弄一个页面上所有input标签的集合
IHTMLElementCollection els = doc.getElementsByTagName("input");//遍历查找我们需要的那个搜索输入框foreach (IHTMLElement em in els){try{i++;if (em.id != null){if (em.id.Contains("q")){//tbSearchWord.Text是一个控件,填写我需要填入淘宝搜索栏的文本em.setAttribute("value", tbSearchWord.Text);}}}catch{}}

获取淘宝页面中的搜索栏,并且自动填写文本就实现了


2.自动点击搜索按钮的实现

和上一步一样的步骤,打开网页调试窗口,可以看到搜索按钮是button标签,所以我们一样获取下button元素

IHTMLElementCollection els2 = doc.getElementsByTagName("button");

然后一样是遍历获取到的按钮,因为按钮中有文本所以我们通过比对innerText即可获取到

foreach (IHTMLElement em in els2){try{if (em.innerText != null){if (em.innerText.Contains("搜索")){em.click();}}}catch{}finally{}}

搜索+点击搜索按钮的函数(无注释版本)

void function2() //auto input {int i = 0;if (webbrowser.IsLoaded != true){InfoAdd("搜索前请先等待页面完成加载");return;}HTMLDocument doc = webbrowser.Document as HTMLDocument;IHTMLElementCollection els = doc.getElementsByTagName("input");foreach (IHTMLElement em in els){try{i++;if (em.id != null){if (em.id.Contains("q")){em.setAttribute("value", tbSearchWord.Text);}}}catch{}}Thread.Sleep(200);IHTMLElementCollection els2 = doc.getElementsByTagName("button");foreach (IHTMLElement em in els2){try{if (em.innerText != null){if (em.innerText.Contains("搜索")){em.click();}}}catch{}finally{}}//   System.Windows.MessageBox.Show("Current:"+i);}

3.翻页的实现

翻页是对于整个网站结构的推测,例如,我先随便搜索什么东西,跳转页面结果后,网址是

https://s.taobao.com/search?q=ai&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306

这里面并没有包含页面的信息,滑动到网页末尾,点击第二页

https://s.taobao.com/search?q=ai&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s=44

可以看到,末尾有一个s=44

通过修改,可以了解,这部分是商品显示的序号,一页显示43个商品,那么s=44就是说,从第44个开始显示

可以试试,s=0 搜索页面末尾的结果

当s=41时

这里让我有点奇怪的是,一页显示是43个,那么最后一个应该是42(因为是从0开始),但这边却是41

不过,依据以上的方法也就基本可以搞懂搜索结果页面翻页的原理了

先获取网页的连接,判断现在的页面是翻页后的页面(有s=)还是没有翻页的页面如果说当前页面不是翻页后的页面,那么就在末尾添加标识,请求下一页的44个商品

tbAddress.Text = webbrowser.Source.AbsoluteUri;string currentUri = tbAddress.Text;
if (currentUri.Contains("ie=utf8") && !currentUri.Contains("&s=")){InfoAdd("当前是搜索结果页面首页");InfoAdd("尝试跳转到第2页");reload(currentUri + "&s=44");return 2;}

如果是翻页的页面,就获取s=的值,以判断当前第几页,算法只是操作字符串,所以就不做详述了。函数会返回当前的页面是搜索结果的第几页

else if (currentUri.Contains("&s=")){InfoAdd("尝试跳转到下一页");string rebuilds = "";string[] s = currentUri.Split('=');s[s.Length - 1] = (Convert.ToInt32(s[s.Length - 1]) + 44).ToString();for (int i = 0; i < s.Length; i++){if (i != 0) rebuilds += "=";rebuilds += s[i];}int currentpage = (Convert.ToInt32(s[s.Length - 1])) / 44 + 1;InfoAdd("当前页为第" + currentpage.ToString() + "页");reload(rebuilds);// System.Windows.MessageBox.Show("RebuildUrl:" + rebuilds);return currentpage;}

翻页部分的整个函数

由按钮触发,自定义的控件有tbNextPage, tbAddress, webbrowser

private void tbNextPage_Click(object sender, RoutedEventArgs e){GoToNextPage();}/// <summary>/// 寻找下一页按钮并跳转/// </summary>/// <returns>跳转后的页面是第几页</returns>private int GoToNextPage(){tbAddress.Text = webbrowser.Source.AbsoluteUri;string currentUri = tbAddress.Text;if (currentUri.Contains("ie=utf8") && !currentUri.Contains("&s=")){InfoAdd("当前是搜索结果页面首页");InfoAdd("尝试跳转到第2页");reload(currentUri + "&s=44");return 2;}else if (currentUri.Contains("&s=")){InfoAdd("尝试跳转到下一页");string rebuilds = "";string[] s = currentUri.Split('=');s[s.Length - 1] = (Convert.ToInt32(s[s.Length - 1]) + 44).ToString();for (int i = 0; i < s.Length; i++){if (i != 0) rebuilds += "=";rebuilds += s[i];}int currentpage = (Convert.ToInt32(s[s.Length - 1])) / 44 + 1;InfoAdd("当前页为第" + currentpage.ToString() + "页");reload(rebuilds);// System.Windows.MessageBox.Show("RebuildUrl:" + rebuilds);return currentpage;}return 0; //当前页面不可跳转}

4.匹配名称和ID并点击商品

商品连接就是普通的连接,在淘宝的页面中是以a标签标注的,所以,依照先前的部分一样,我们需要实例化并且获取到所有的a标签元素

 HTMLDocument doc = webbrowser.Document as HTMLDocument;IHTMLElementCollection allurl = doc.getElementsByTagName("a");

然后就是对获取到的a标签进行筛选,获取到目标,有一点是,天猫,推荐和普通商品这三种,连接的服务器名部分是不一样的

foreach (IHTMLElement em in allurl){string url = em.getAttribute("href");if (url == null) continue;string[] sarr = url.Split(new char[] { '/' });if (sarr.Length < 3) continue;string s = url.Split(new char[] { '/' })[2].Split(new char[] { '.' })[0];string name = em.innerText;//普通被勾选if (cbItem.IsChecked == true && cbDetail.IsChecked == false && cbClick.IsChecked == false){if (s.Equals("detail") || s.Equals("item")){if (name != null && name.Contains("销量") == false && name.Contains("¥") == false && name.Contains(".00") == false){tbaddressinfo.Text += url + "\r\n";if (name.Length > 2){if (name.Contains(targetname) || name.Contains(targetname.Substring(0, targetname.Length - 1)) ){if(url.Contains(tbTargetID.Text)){reload(url);finded = true;break;}}}}}}

通过上面的算法就可以选出我们需要的物品的名称以及连接,最后一步的判断有一个匹配TargetID的部分

                                      if(url.Contains(tbTargetID.Text)){reload(url);finded = true;break;}

其中这里的tbTargetID是指的一件商品独有的ID,因为只搜索商品名称,有可能会有重复的问题,所以建议加上该部分判断

如果还有不了解的请在评论中留言

如何使用C#调用淘宝网页自动搜索,翻页和点击商品相关推荐

  1. Python:selenium淘宝页面自动搜索案例

    直接上代码 from selenium import webdriver from time import sleep bro =webdriver.Chrome(executable_path='. ...

  2. 帝国CMS淘宝客插件,帝国自动调用淘宝客插件链接自动转换

    插件功能 可以根据根据设置的字段自动调用淘宝客商品数量,适用于各种资讯和导购站 具体看演示地址,可根据自己的样式来调用数据

  3. Web前端设计与开发课程设计:简易淘宝网页设计

    实验日期:2022-09-23 (一)大作业要求 综合运用所学知识,完成一个Web前端项目.内容和功能不做具体限定,主题可以是商业公司网站.学校网站或电商网站等. 技术要求: 掌握HTML5的基本结构 ...

  4. python 淘宝滑块验证_python2.7+selenium2实现淘宝滑块自动认证功能

    本文为大家分享了python2.7+selenium2实现淘宝滑块自动认证的具体代码,供大家参考,具体内容如下 1.编译环境 操作系统:win7:语言:python2.7+selenium2:ide: ...

  5. 淘宝网页显示不正常,其它网站正常显示---解决办法

    随便打开一个连接,进去后,网页就更加混乱了,其他网站都能正常显示的,就只有淘宝网这样.这是随便点击一个连接后的图片.. 旁边白白的一片... 个人电脑处于局域网,默认网关和DNS都为192.168.1 ...

  6. 【任务脚本】1104更新双十一京东淘宝任务脚本,全自动程序,淘宝京东自动做任务...

       公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达.     今天试了一下大神的脚本,将相关的注意事项发一下.     删掉了之前的 ...

  7. PHP实现调用淘宝SDK开放接口返回天猫或淘宝商品详情

    在淘宝开发平台申请到app key及app secret并在开放平台上的app tools在线测试成功以后,就可以在自己的项目中使用淘宝SDK来调用淘宝或天猫的商品详情了,包括标题.图片.价格等等所有 ...

  8. 简单使用Python爬虫爬取淘宝网页商品信息

    最近在学习爬虫,本人还是入门级的小白,自己跟着老师写了一些代码,算是自己的总结,还有一些心得,跟大家分享一下,如果不当,还请各位前辈斧正. 这是代码: # 导入库 import requests im ...

  9. 使用selenium模块自动打开淘宝并进行搜索

    Selenium是一个自动化测试工具,可以驱动浏览器器执行特定的动作,如点击,下拉等.可以用来进行模拟人工操作浏览器进行测试,爬虫等. 如果没有安装环境可以先pip install Selenium, ...

最新文章

  1. JavaScript(六)函数
  2. python粘性拓展_Python基础之:拓展解决问题的思路
  3. Mongodb数据库连接
  4. shell -nginx启动脚本
  5. The 'microsoft.jet.oledb.4.0' provider is not registered on the local machin
  6. 前端学习(666):赋值运算符
  7. Apache Log4j2远程JNDI代码执行漏洞修复
  8. B6-简析响应者链条
  9. Linux下dig命令使用
  10. Python实现多条.txt文本数据合并为.csv文件数据
  11. VR全景视频、图片播放器
  12. 网盘有哪些?网盘哪个好用?
  13. 动词ing基本用法_动词ing形式的用法
  14. Lecture2:损失函数及优化
  15. 王艳 201771010127《面向对象程序设计(Java)》第四周学习总结
  16. DNS flood攻击分析
  17. 计算机基础——操作系统
  18. 基于51单片机智能家居家电继电器开关插座定时WiFi无线proteus仿真原理图PCB
  19. googlemap中添加指南针图标
  20. 升级易语言支持库保证向下兼容性的几点总结

热门文章

  1. Java通过HAPI解析HL7消息
  2. 陶  朱  商  经
  3. 亚马逊云计算平台---------AWS(一)
  4. 风生水起的VR直播丨VR直播市场何时迎来爆发期?
  5. 1.软件工程—数据流图
  6. 日语输入法无法使用的解决方法
  7. 2021 年,中台的“瓜”你还吃吗?
  8. 论仪式感在品牌营销中的重要性
  9. flutter配置环境变量时找不到前往~/.bash_profile,找不到
  10. 什么是动态代理?两种常用的动态代理方式