是硒的新手。我正在尝试使用它来“填写”网络表单,以便最终我可以在Python中以字典的形式获得结果。到目前为止,我有
from selenium.webdriver.common.keys import Keys
from time import sleep
driver = webdriver.Chrome()
driver.get("https://my.crawley.gov.uk/en/service/check_my_bin_collection?accept=yes&consentMessageIds[]=24")
sleep(5)
assert "Check bin collections" in driver.title
elem = driver.find_element_by_id('PostcodeSearch')
elem.clear()
elem.send_keys("RH10 7AB")
elem.send_keys(Keys.RETURN)
driver.close()
但是无论我选择哪种方法,我都在努力获取页面上的元素
答案 0 :(得分:1)
尝试以下行
driver.get("https://my.crawley.gov.uk/en/service/check_my_bin_collection?accept=yes&consentMessageIds[]=24")
# your frame is getting changed you need to switch the frame and wait for it
WebDriverWait(driver,30).until(EC.frame_to_be_available_and_switch_to_it('fillform-frame-1'))
WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.XPATH,'//*[@id="PostcodeSearch"]')))
time.sleep(1)
# assert "Check bin collections" in driver.title
elem = driver.find_element_by_id('PostcodeSearch')
elem.clear()
elem.send_keys("RH10 7AB")
elem.send_keys(Keys.RETURN)
答案 1 :(得分:1)
邮政编码字段位于<iframe>
中,因此您必须:
诱导 WebDriverWait 以使所需的框架可用并切换到。
诱导 WebDriverWait 以使所需的元素可点击。
您可以使用以下任一Locator Strategies:
使用CSS_SELECTOR
:
driver.get('https://my.crawley.gov.uk/en/service/check_my_bin_collection?accept=yes&consentMessageIds[]=24')
elem = WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[title='Check bin collections']")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#PostcodeSearch")))
elem.send_keys("RH10 7AB")
使用XPATH
:
driver.get("https://my.crawley.gov.uk/en/service/check_my_bin_collection?accept=yes&consentMessageIds[]=24")
elem = WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@title='Check bin collections']")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='PostcodeSearch']")))
elem.send_keys("RH10 7AB")
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
浏览器快照:
您可以在以下位置找到相关的讨论