Как ввести дату в поле ввода «День газа» через Selenium и Python

Я использую Python и Selenium для чтения этого URL-адреса: http://ips.alliance-pipeline.com/Ips/MainPage.aspx?siteId=4

Я использую селен, чтобы открыть его, щелкнуть знак плюса (слева) и нажать «Ежедневная пропускная способность». Откроется страница с полем ввода «День газа», в котором я хочу ввести дату. Если эти шаги выполняются вручную в обычном браузере Chrome, все работает нормально, я могу ввести дату и нажать «Получить» и получить таблицу данных. Но по какой-то причине селен делает поле ввода доступным только для чтения. Я попытался удалить атрибут «только для чтения» (см. закомментированные строки), и в этом случае атрибут, кажется, удаляется, но дата все еще не вводится в поле, и данные не извлекаются.

Почему селен делает этот элемент доступным только для чтения и как этого избежать?

Вот код:

url = 'http://ips.alliance-pipeline.com/Ips/MainPage.aspx?siteId=4'
browser = webdriver.Chrome()
browser.get(url)
browser.find_element_by_id('treeviewn0').click() # click on "Capacity" heading
browser.find_element_by_id('treeviewt1').click() # click on "Daily Throughput" heading
time.sleep(2)
# browser.execute_script('document.getElementsByClassName("igte_EditInContainer")[0].removeAttribute("readonly")')
d = datetime.date.today() - datetime.timedelta(days=5)
d_str = d.strftime('%m/%d/%Y')
date_box = browser.find_element_by_xpath('//*[@id="MainContent_dtJobSchedForGrid"]/tbody/tr/td[1]/input')
# print(date_box.get_attribute('readonly'))
date_box.send_keys(d_str + '\n')
time.sleep(5)
browser.find_element_by_id('MainContent_btnRetrieveJobSchedForGrid').click() # click the Retrieve button
time.sleep(5)

person jrodioukova    schedule 05.10.2018    source источник
comment
Можете ли вы опубликовать полученную ошибку? Это может быть несколько причин, почему это не удается.   -  person niklas    schedule 06.10.2018
comment
Selenium просто использует ваш обычный браузер, поэтому я не понимаю, как это может быть причиной этой проблемы. Вместо этого должен быть какой-то шаг, который вы выполняете вручную и который не воспроизводится в сценарии. Возможно, это шаг, который вы даже не осознаете, например, наведение курсора на элемент?   -  person John Gordon    schedule 06.10.2018
comment
@niklas Я не получаю ошибку, просто не вводит дату во ввод, поэтому таблица данных не появляется при нажатии кнопки «Получить».   -  person jrodioukova    schedule 07.10.2018


Ответы (1)


Чтобы отправить дату в виде последовательности символов в поле День газа, необходимо вызвать WebDriverWait для нужного < em>элемент, который будет кликабельным, и вы можете использовать следующее решение:

  • Блок кода:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    browser = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    browser.get("http://ips.alliance-pipeline.com/Ips/MainPage.aspx?siteId=4")
    browser.find_element_by_id('treeviewn0').click() # click on "Capacity" heading
    browser.find_element_by_id('treeviewt1').click() # click on "Daily Throughput" heading
    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.igte_EditInContainer"))).send_keys("10/04/2018")
    
  • Снимок браузера:

дата

person DebanjanB    schedule 05.10.2018