Изменить дату в Datepicker с помощью Selenium / Python - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь получить доступ и изменить дату на следующем веб-сайте с помощью Python / Selenium:

http://www.b3.com.br/en_us/market-data-and-indices/data-services/market-data/historical-data/derivatives/trading-session-settlements/

При попытке нажать на календарь, я получить следующую ошибку: selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: /html/body/div[1]/div[1]/div/form/div/div[1]

Я думаю, мне нужно активировать какой-нибудь js -код, но у меня возникают проблемы с поиском указанного c js -кода. Кто-нибудь есть какие-либо предложения о том, как я могу активировать контент на веб-странице?

Я попытался использовать следующий код:

driver.get('http://www.b3.com.br/en_us/market-data-and-indices/data-services/market-data/historical-data/derivatives/trading-session-settlements/')
time.sleep(5)
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/form/div').click()
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/form/div/div[1]').click()
driver.find_element_by_xpath('//*[@id="dData1"]').click()
driver.find_element_by_xpath('//*[@id="dData1"]').clear()
driver.find_element_by_xpath('//*[@id="dData1"]').send_keys('04/08/2020')

Я получаю, что код уже терпит неудачу в строке 2, но я не понимаю, почему, когда я копировал Xpath, как я всегда делаю, когда Использование селена на веб-странице.

Заранее благодарим за помощь!

1 Ответ

0 голосов
/ 10 апреля 2020

iframe присутствует на вашей веб-странице, включите управление им перед выполнением отправки ключа. См. Приведенное ниже решение:

driver.maximize_window()
wait = WebDriverWait(driver, 10)
driver.get("http://www.b3.com.br/en_us/market-data-and-indices/data-services/market-data/historical-data/derivatives/trading-session-settlements/")
# driver.find_element_by_tag_name('body').send_keys("Keys.ESCAPE")
iframe=driver.find_element_by_id("bvmf_iframe")
driver.switch_to.frame(iframe)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "input#dData1.datepicker.hasdatepicker"))).clear()
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "input#dData1.datepicker.hasdatepicker"))).send_keys('02/01/2021')

Примечание : добавьте следующие импорта в ваше решение:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

Вывод :

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...