自己动手实现抖音高清无水印视频下载工具(3)

发布于:2023-05-22 ⋅ 阅读:(356) ⋅ 点赞:(0)

前情回顾

书接上回,上次我们在调试过程中,成功拿到了sec_uid,但是无法成功访问接口,提示了错误内容: {"status_code":1,"status_msg":"Url doesn't match"}

凭借经验分析后,基本可以确定导致以上问题的原因基就是接口可能做了反爬校验,直接校验了user-Agent等参数来判定是否是模拟访问,那么今天我们换个思路,我们尝试使用浏览器内核驱动去调用接口,看看能否成功。

Selenium介绍

Selenium是什么

Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。 Selenium也是一款同样使用Apache License 2.0协议发布的开源框架。

为什么要使用Selenium

Selenium最初是为网站自动化测试而开发的,Selenium可以直接调用浏览器,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏等,可以完美模拟浏览器端操作,一些API接口的反爬不太会识别到,这么就可以解决之前遇到的反爬导致调用不通问题。

继续解决user/info无法访问的问题

经过上面的铺垫,大家基本了解了Selenium的用途,我们继续了解使用方法

首选,我们需要安装GoogleChrome浏览器,并查看版本号

image.png

接着,打开驱动下载地址(地址可以自行百度):

image.png

找到和浏览器版本对应的驱动:

image.png

image.png

 下载并解压到随意位置,这里是我的存放路径:

image.png

 然后我们继续到代码里进行改造,首先在pom.xml中添加Selenium引用:

        <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>3.141.59</version>
        </dependency>

这里有个坑要注意下,如果项目引用了swagger2,会有冲突导致报错,我这里直接吧swagger2引用先删掉了,如果需要共存,可以百度找解决方法。

image.png

我们继续改造调用接口的代码,这里将之前用HttpRequest的请求方式改为Selenium模拟浏览器请求,直接上代码:

	/**
	 * 
	 * @param homeUrl 首页地址
	 * @param url 接口地址
	 */
	public void getUserInfo(String homeUrl,String url){
		String sec_uid=getLocationParam(homeUrl);
		String apiUrl=url+"?sec_uid="+sec_uid;
		System.out.println(apiUrl);
		System.getProperties().setProperty("webdriver.chrome.driver","F:\\proj\\drivers\\chromedriver.exe");
		 //开启webDriver进程
		 ChromeOptions options = new ChromeOptions();
                 //下面2个参数是不让浏览器弹出,不然浏览器闪出来一下
		 options.addArguments("--headless");
		 options.addArguments("--disable-gpu");
		 WebDriver webDriver = new ChromeDriver(options);
		 webDriver.get(apiUrl);
		 String h=webDriver.getPageSource();
		 System.out.println(h);
		 webDriver.close();
		 webDriver.quit();
//		 String jsonString = JwtHttpUtil.httpRequest(apiUrl, "POST", null);
//		 System.out.println(jsonString);
	}

运行结果:

image.png

 执行完成后,终于看到了我想要的内容了,至此sec_uid以及user/info接口的调用都已经完美解决,下期我们继续分析其他内容。

阶段总结:

1、分析接口时要充分利用Google Chrome浏览器的调试工具来搜索代码内容,通过代码出现位置的上下文进行分析跟踪。

2、HttpRequest会被后端反爬规则拦截,可以搭配Selenium灵活运用。

3、Selenium虽然好用,但是它会创建系统进程,自然会影响代码执行效率,这里需要进行优化。

 

最后小编在学习过程中整理了一些学习资料,可以分享给做软件测试工程师的朋友们,相互交流学习,需要的可以加入我的学习交流群 323432957 或加微dingyu-002即可免费获取Python自动化测开及Java自动化测开学习资料(里面有功能测试、性能测试、python自动化、java自动化、测试开发、接口测试、APP测试等多个知识点的架构资料)

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到