首页
文章
代码笔记
资源分享
生活随笔
AI相册
工具箱
归档
友链
关于
微信公众号
欢迎关注,一起学习!
搜索
搜索内容
×
文章详情
Playwright事件监听
Python
Playwright
### 一、代码解释 1. 打开chromium浏览器 2. 监听响应response事件 3. 打开IP查询页面 4. 通过xpath定位输入框,使用文本输入方法fill,输入IP地址 5. 通过xpath定位查询按钮,通过click方法点击按钮,然后等待3秒接口响应。 6. wait_for_load_state等待页面某个状态完成,这里传入的 state 是 networkidle(网络空闲状态) ### 二、代码示例 ```python # -*- coding:utf-8 -*- import asyncio from time import sleep from playwright.async_api import async_playwright async def on_response(response): # # 本机IP地址查询 # if '/ip/local/geo/v1/district' in response.url and response.status == 200: # print(f'Statue {response.status}: {response.url}') # data = await response.json() # print('本机IP:', data) # print() # 输入IP地址查询 if '/ip/geo/v1/district' in response.url and response.status == 200: print(f'Statue {response.status}: {response.url}') data = await response.json() print('查询IP:', data) async def main(ip_list: list): async with async_playwright() as p: # 1.打开chromium浏览器 browser = await p.chromium.launch(headless=False) # headless:默认为True无头模式启动浏览器 page = await browser.new_page() try: # 2.监听响应response事件 page.on('response', on_response) # 3.打开IP查询页面 url = 'https://qifu.baidu.com/?activeKey=SEARCH_IP&trace=apistore_ip_aladdin&activeId=SEARCH_IP_ADDRESS&ip=' await page.goto(url) for ip in ip_list: # 4.通过xpath定位输入框,文本输入方法fill,输入IP地址 await page.fill("xpath=/html/body/div[4]/div/div[2]/div/div[1]/div/div[2]/input", ip) # 5.通过xpath定位查询按钮,通过click方法点击按钮 await page.click("xpath=/html/body/div[4]/div/div[2]/div/div[1]/div/div[2]/div") await asyncio.sleep(3) # 等待3秒 except Exception as err: print('err:', err) # 6.wait_for_load_state等待页面某个状态完成,这里传入的 state 是 networkidle(网络空闲状态) await page.wait_for_load_state('networkidle') await browser.close() if __name__ == '__main__': ip_list = ['119.75.217.109', '40.77.189.185'] asyncio.run(main(ip_list)) ``` ### 三、控制台结果 ```plaintext Statue 200: https://qifu-api.baidubce.com/ip/geo/v1/district?ip=119.75.217.109 查询IP: {'code': 'Success', 'data': {'continent': '亚洲', 'country': '中国', 'zipcode': '100000', 'timezone': 'UTC+8', 'accuracy': '城市', 'owner': '百度', 'isp': '百度', 'source': '数据挖掘', 'areacode': 'CN', 'adcode': '110000', 'asnumber': '38365', 'lat': '', 'lng': '', 'radius': '105.2321', 'prov': '北京市', 'city': '', 'district': ''}, 'charge': False, 'msg': '查询成功', 'ip': '119.75.217.109', 'coordsys': 'WGS84'} Statue 200: https://qifu-api.baidubce.com/ip/geo/v1/district?ip=40.77.189.185 查询IP: {'code': 'Success', 'data': {'continent': '北美洲', 'country': '美国', 'zipcode': '60604', 'timezone': 'UTC-6', 'accuracy': '城市', 'owner': '微软公司', 'isp': '微软公司', 'source': '数据挖掘', 'areacode': 'US', 'adcode': '', 'asnumber': '8075', 'lat': '41.877932', 'lng': '-87.630025', 'radius': '', 'prov': '伊利诺伊州', 'city': '芝加哥', 'district': ''}, 'charge': False, 'msg': '查询成功', 'ip': '40.77.189.185', 'coordsys': 'WGS84'} Process finished with exit code 0 ```
评论 (${comments_count})
评论
Loading...
${item.comment_time}
${item.nickname}
${c1_item.comment_time}
${c1_item.nickname}
${c1_item.reply_nickname}
${c1_item.content}
${comment_header_label}
×
邮件提醒
有回复时邮件通知我
${comment_header_label}