前言
遇到输入框是弹出日历控件,选一个日期的这种场景,可以直接在输入框输入内容。如果输入框是readonly的时候,可以用js改变输入框的属性
日历控件
如果输入框是日历控件
先看能不能直接输入一个日期,如果能直接输入的情况,就不用点开了
代码示例
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto('http://127.0.0.1:8000/users/login/')
page.locator('#username').fill('123@qq.com')
page.locator('#password_l').fill('******')
page.locator('#jsLoginBtn').click()
page.goto('http://127.0.0.1:8000/users/userinfo/')
# 日历控件直接输入
page.locator('#date_day').fill('2021-04-01')
page.pause()
readonly 的日历控件
有些日历控件是 readonly 属性,也就是不能直接输入的
<input type="text" id="birth_day" name="birthday" value="2023-04-02" readonly="readonly">
这种情况先要执行JavaScript 去掉元素的 readonly 属性,再输入
JavaScript 操作日历控件
from playwright.sync_api import sync_playwright
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto('http://124.70.221.221:8200/users/login/')
page.locator('#username').fill('123@qq.com')
page.locator('#password_l').fill('******')
page.locator('#jsLoginBtn').click()
page.goto('http://127.0.0.1:8000/users/userinfo/')
# 去掉元素的readonly属性
js1 = 'document.getElementById("birth_day").removeAttribute("readonly");'
page.evaluate(js1)
# 直接给输入框赋值
js2 = 'document.getElementById("birth_day").value="2021-04-01";'
page.evaluate(js2)
page.pause()
文章转自:https://www.cnblogs.com/yoyoketang/p/17372677.html