爬虫总结
背景:
做浏览器自动化测试,或者是爬虫,总是每次都会打开多个网页,这样最大的弊端是,每次都需要登录,这样就会增加危险系数以及增加了复杂度,因为没有正常的用户是会频繁登入登出的。
需求
每次爬虫只登录一次,即复用同一个网页,这样就不需要每次都从头开始执行。
解决办法:
使用浏览器的远程调试模式
,即用命令
启动一个页面,然后手动或自动在本页面登录上目标网站,这样就可以实现了页面复用。
步骤:
1、下载和已有浏览器对应的浏览器驱动,然后将驱动放到浏览器安装目录下。
2、将浏览器安装目录写入系统path环境变量。
3、命令行启动浏览器实例:
# edge
msedge --remote-debugging-port=指定的端口 --user-data-dir="d:\xxxx\自定义浏览器实例数据缓存位置"
# chrome
chrome--remote-debugging-port=指定的端口 --user-data-dir="d:\xxxx\自定义浏览器实例数据缓存位置"
4、在命令行启动的浏览器中,输入要爬虫的地址
,如果需要登录就登录,一切以页面的要求为准,即页面需要做啥就做啥。
5、根据目标浏览器实例的ip和端口,进行远程调试,注意:默认接管该**浏览器实例的第一个标签页面
**。
ts-node代码实例:
import { Builder, By } from "selenium-webdriver";
import edge from "selenium-webdriver/edge";
(async () => {
// 浏览器驱动实例配置选项
const options:any = new edge.Options();
// 指定远程地址和端口
options.options_["debuggerAddress"] = "127.0.0.1:5555";
console.log(111);
// 建立连接,获取被接管浏览器(驱动)实例
let driver = await new Builder()
.forBrowser('MicrosoftEdge')
.setEdgeOptions(options)
.build();
// 获取被接管页面的元素
let h = await driver.findElement(By.css('#hotsearch-content-wrapper > li:nth-child(3) > a > span.title-content-title')).getText()
console.log(h);
})();