爬虫自动化工具,因为js逆向十分灵活,下面以在浏览器上的一个test函数为例
window.test = function(){
console.log("666"); //先创建一个函数
}
test(); //直接调用
window["test"](); //利用window来进行调用
var a = "test";
window[a](); //通过定义a来进行调用
console.log((true+"").slice(0,1)); //t
console.log((true+"").slice(3,4)); //e
console.log((false+"").slice(3,4)); //s
window[(true+"").slice(0,1)+(true+"").slice(3,4)+(false+"").slice(3,4)+(true+"").slice(0,1)]();
//通过切片来凑出test,下面还可以进一步变得更复杂
//还可以吧true换为!![],把false换为![]
介绍
Playwright 是一个开源的自动化库,由 Microsoft 开发,用于基于 Chromium, Firefox, 和 WebKit 的浏览器自动化。它支持多种语言,包括 Python,并能在 Windows, Linux, 和 macOS 上运行。
官方文档:https://playwright.dev/python/docs/api/class-elementhandle
安装
安装 Playwright
pip install playwright
安装浏览器驱动
python -m playwright install
注意事项:Python版本 ≥ 3.8。 都在终端操作
安装完成可以根据此目录去找
注意APPDATE是隐藏文件
基本操作
# 导包
from playwright.sync_api import sync_playwright
# playwright 控制浏览器操作的【需不需要代码写请求数据?】 请求由浏览器发
# 创建 playwright 对象 =》 通过 python 操作浏览器 【playwright 对象】
pw = sync_playwright().start()
# 启动浏览器 =》通过 playwright 对象启动 chromium 浏览器(headless=False 无头模式)
browser = pw.chromium.launch(headless=False) # 有头,显示浏览器 playwright支持的浏览器:chromium、firefox、webkit
# browser = pw.chromium.launch(headless=True) # 无头 =》不显示浏览器界面
# 创建上下文管理器?
context = browser.new_context()
# 打开一个页面
page = context.new_page()
# 访问网站
page.goto('https://www.baidu.com')
# 等待时长
page.wait_for_timeout(10000)
page对象
page 对象
page.goto(): 参数是网址【需要通过定位请求来确定网址吗? 不要】
-
timeout:超时时间,单位毫秒
-
wait_until:等待,直到什么时候
获取页面源码: page.content()
获取页面标题: page.title()
获取页面 url:page.url
如果访问一个网站获取到的是 json 数据,那么显示出来的是json数据【直接显示】。
通过浏览器获取到的数据是经过浏览器处理之后得到的数据【html】。
xpath:如果直接在浏览器获取xpath得不到数据的话,还是需要分析 print(page.content())。
定位:
playwright 的 xpath 定位到的元素对象必须要先判断是否存在。
元素对象.count() 统计当前元素个数
获取所有元素: 元素对象.all()
获取文本: 元素对象.inner_text()
获取所有文本: 元素对象.all_inner_texts()
获取元素属性: 元素对象.get_attribute()
由于 playwright 支持多种定位方式,如果没有特殊的 xpath 定位符号,则需要明确表示是 xpath 语法。
以后不是以 // 开头的 xpath 语法,就需要用 xpath= 开头
输入:元素对象.fill(文本内容)
点击:元素对象.click()
鼠标操作
移动鼠标
page.mouse.down():按下鼠标
page.mouse.move(x, y):移动鼠标
page.mouse.up():释放鼠标
获取元素坐标
元素对象.bounding_box()
案例:https://www.helloweba.net/demo/2017/unlock/
python测试脚本
# 导包
from playwright.sync_api import sync_playwright
pw = sync_playwright().start()
browser = pw.chromium.launch(headless=False) # 有头,显示浏览器 playwright支持的浏览器:chromium、firefox、webkit
context = browser.new_context()
page = context.new_page()
page.goto('https://www.helloweba.net/demo/2017/unlock/')
# 定位滑块位置
slide = page.locator('//html/body/div/div/div/div[1]/div[1]/div[3]')
slide_location = None
if slide.count() > 0:
# print(slide)
# print(slide.bounding_box()) # {'x': 68.5, 'y': 192.796875, 'width': 37, 'height': 38}
slide_location = slide.bounding_box()
# 定位滑块外方框的位置
box = page.locator('//html/body/div/div/div/div[1]/div[1]/div[1]')
box_location = None
if box.count() > 0:
print(box)
print(box.bounding_box()) # {'x': 68.5, 'y': 192.796875, 'width': 37, 'height': 38}
box_location = box.bounding_box()
# 移动鼠标到滑块所在的位置【点击到滑块中间】
page.mouse.move(slide_location["x"]+slide_location["width"]/2, slide_location["y"]+slide_location["height"]/2)
# 按下鼠标左键
page.mouse.down()
# 移动鼠标到方框最右边
page.mouse.move(slide_location["x"] + box_location['width'], slide_location["y"])
# 释放鼠标
page.mouse.up()
# 等待时长
page.wait_for_timeout(3000)