使用 Selenium WebDriver 填充日期字段
Filling date field with Selenium WebDriver
我正在尝试使用 Selenium 填写注册表进行练习,因为我开始熟悉这个库。
就是这个网站的注册表:https://www.fast2sms.com/
我目前正在尝试的
我从这个开始:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.fast2sms.com/")
在那里,我点击了 data-target
属性设置为 "#signupM"
的注册按钮,同时使用了 css 选择器:
driver.find_element_by_css_selector('button[data-target="#signupM"]').click()
然后我为字段设置了一些虚拟值:
from phone_gen import PhoneNumber
name = "John Doe"
dob = "02-01-1990"
phone_number = PhoneNumber("India").get_number().replace("+91", "")
email_address = f"{phone_number}@mailinator.com"
我等待姓名字段,并填写它:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
name_field = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input[name="signup_name"]')))
name_field.send_keys(name)
然后phone号码和邮箱地址:
phone_number_field = driver.find_element_by_css_selector('input[name="signup_mobile"]')
phone_number_field.send_keys(phone_number)
email_addr_field = driver.find_element_by_css_selector('input[name="signup_email"]')
email_addr_field.send_keys(email_address)
到这里为止一切正常,完全符合预期,但是当我尝试填写出生日期字段时,我遇到了问题:
dob_field = driver.find_element_by_css_selector('input[name="signup_dob"]')
dob_field.send_keys(dob)
我面临的问题
- 出生日期字段未填写。
- 它抛出一个错误,
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
- 我无法提交未填写出生日期的表格。
我尝试调试的方法
- 重新检查了 CSS 选择器
- 等待出生数据字段可以使用 WebDriverWait 进行交互
- 我没有填写文本,而是尝试与单击该字段时出现的弹出窗口进行交互(我想我必须这样做,但不知道怎么做。)
看似重复但实际并非如此的问题:
Select Particular Date using Python Selenium (Rollover dates)
Using Selenium on calendar date picker
我明白为什么它可能不起作用。该网站正在使用一个名为 datedropper 的特定 javascript 库。因此日期的输入元素是只读格式。
我认为你可以通过以下方式解决它:
js_code = "document.querySelector('input[name=signup_dob]').value ="
driver.execute_script(js_code + your_date)
不太确定 js 代码是否会起作用。它可能需要一些编辑。
我正在尝试使用 Selenium 填写注册表进行练习,因为我开始熟悉这个库。
就是这个网站的注册表:https://www.fast2sms.com/
我目前正在尝试的
我从这个开始:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.fast2sms.com/")
在那里,我点击了 data-target
属性设置为 "#signupM"
的注册按钮,同时使用了 css 选择器:
driver.find_element_by_css_selector('button[data-target="#signupM"]').click()
然后我为字段设置了一些虚拟值:
from phone_gen import PhoneNumber
name = "John Doe"
dob = "02-01-1990"
phone_number = PhoneNumber("India").get_number().replace("+91", "")
email_address = f"{phone_number}@mailinator.com"
我等待姓名字段,并填写它:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
name_field = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input[name="signup_name"]')))
name_field.send_keys(name)
然后phone号码和邮箱地址:
phone_number_field = driver.find_element_by_css_selector('input[name="signup_mobile"]')
phone_number_field.send_keys(phone_number)
email_addr_field = driver.find_element_by_css_selector('input[name="signup_email"]')
email_addr_field.send_keys(email_address)
到这里为止一切正常,完全符合预期,但是当我尝试填写出生日期字段时,我遇到了问题:
dob_field = driver.find_element_by_css_selector('input[name="signup_dob"]')
dob_field.send_keys(dob)
我面临的问题
- 出生日期字段未填写。
- 它抛出一个错误,
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
- 我无法提交未填写出生日期的表格。
我尝试调试的方法
- 重新检查了 CSS 选择器
- 等待出生数据字段可以使用 WebDriverWait 进行交互
- 我没有填写文本,而是尝试与单击该字段时出现的弹出窗口进行交互(我想我必须这样做,但不知道怎么做。)
看似重复但实际并非如此的问题:
Select Particular Date using Python Selenium (Rollover dates)
Using Selenium on calendar date picker
我明白为什么它可能不起作用。该网站正在使用一个名为 datedropper 的特定 javascript 库。因此日期的输入元素是只读格式。
我认为你可以通过以下方式解决它:
js_code = "document.querySelector('input[name=signup_dob]').value ="
driver.execute_script(js_code + your_date)
不太确定 js 代码是否会起作用。它可能需要一些编辑。