【发布时间】:2017-10-24 10:47:13
【问题描述】:
我正在尝试使用 selenium 填写网络表单。虽然我能够成功填充大多数文本框并选择单选按钮,但在尝试将密钥发送到三个 [出生日期] 字段(日、月和年)时,我收到以下异常以及表单第二部分中的 [lifecover] 字段。
ElementNotVisibleException:元素不可见 (会话信息:chrome=62.0.3202.62) (驱动信息:chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 6.1.7601 SP1 x86_64)
上述异常是从以下代码中收到的:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
path_to_chromedriver = 'C:/Users/Me/chromedriver/chromedriver'
browser = webdriver.Chrome(executable_path = path_to_chromedriver)
url = 'https://lifeinsurance.rac.com.au/rac/get-a-quote?productid=51'
browser.get(url)
...
# date of birth - CANNOT POPULATE!
browser.find_element_by_id('txtDateOfBirth__1_Day').send_keys('01')
browser.find_element_by_id('txtDateOfBirth__1_Month').send_keys('06')
browser.find_element_by_id('txtDateOfBirth__1_Year').send_keys('1988')
...
# cover amount - CANNOT POPULATE!
browser.find_element_by_xpath('//*[@id="txtCoverAmount__1"]').send_keys('150000')
...
完整代码(包括以上)如下:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
path_to_chromedriver = 'C:/Users/Me/chromedriver/chromedriver'
browser = webdriver.Chrome(executable_path = path_to_chromedriver)
url = 'https://lifeinsurance.rac.com.au/rac/get-a-quote?productid=51'
browser.get(url)
# quote type
browser.find_element_by_xpath('//*[@id="rdApplicantCount_1_Label"]/span[1]').click()
# title
browser.find_element_by_xpath('//*[@id="divApplicantDetails__1"]/div[1]/div/div[2]/span/span/span[1]').click()
browser.find_element_by_xpath('//*[@id="ddTitle__1_listbox"]/li[2]').click()
# first name and surname
browser.find_element_by_name('txtFirstName__1').send_keys('richard')
browser.find_element_by_name('txtSurname__1').send_keys('castle')
# email
browser.find_element_by_name('txtEmail__1').send_keys('rcastle@gmail.com')
# mobile number
browser.find_element_by_name('txtPhoneNumber__1').send_keys('0418545898')
# date of birth - CANNOT POPULATE!
browser.find_element_by_id('txtDateOfBirth__1_Day').send_keys('01')
browser.find_element_by_id('txtDateOfBirth__1_Month').send_keys('06')
browser.find_element_by_id('txtDateOfBirth__1_Year').send_keys('1988')
# gender
browser.find_element_by_xpath('//*[@id="rdGender_Female__1_Label"]/span[1]').click()
# residence
browser.find_element_by_xpath('//*[@id="divApplicantDetails__1"]/div[8]/div/div[2]/span/span/span[1]').click()
browser.find_element_by_xpath('//*[@id="ddResidentialStatusId__1_listbox"]/li[1]').click()
# residing in australia
browser.find_element_by_xpath('//*[@id="rdResidingInAustralia_Yes__1_Label"]/span[1]').click()
# open cover section
browser.find_element_by_xpath('//*[@id="divQuote_Accordion"]/div[3]/div').click()
# tobacco
browser.find_element_by_xpath('//*[@id="rdSmoker_Yes__1_Label"]/span[1]').click()
# cover amount - CANNOT POPULATE!
browser.find_element_by_xpath('//*[@id="txtCoverAmount__1"]').send_keys('150000')
# get quote
browser.find_element_by_xpath('//*[@id="divApplicantCover"]/div[3]/div[2]/button').click()
# premium frequency
browser.find_element_by_xpath('//*[@id="productTabStrip-1"]/div[1]/div[1]/div/div[4]/div[2]/span/span/span[1]').click()
browser.find_element_by_xpath('//*[@id="ddPremiumFrequencyId_listbox"]/li[2]').click()
# capture result
browser.find_element_by_xpath('//*[@id="productTabStrip-1"]/div[1]/div[1]/div/div[3]/div[1]/div[2]/span').text
我是 selenium 新手,如果有人能建议如何将密钥发送到引发异常的字段,我将不胜感激
【问题讨论】:
-
您应该尝试明确等待这些输入字段的可见性。 selenium-python.readthedocs.io/waits.html