python - 如何通过 Selenium 和 Python 在 Gas Day 输入框中输入日期
问题描述
我正在使用 Python 和 Selenium 来阅读这个 URL: http: //ips.alliance-pipeline.com/Ips/MainPage.aspx ?siteId=4
我使用 selenium 打开它,单击加号(左侧)并单击“每日吞吐量”。打开一个带有“Gas Day”输入框的页面,我想在其中输入日期。如果这些步骤是在常规 chrome 浏览器中手动完成的,它工作正常,我可以输入日期并单击“检索”并获取数据表。但是由于某种原因,selenium 使输入框成为只读的。我已尝试删除“只读”属性(请参阅注释掉的行),在这种情况下,该属性似乎已被删除,但日期仍未在框中输入,也未检索到数据。
为什么 selenium 将此元素设为只读,我该如何防止这种情况发生?
这是代码:
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)
解决方案
要将日期作为字符序列发送到Gas Day字段,您需要诱导WebDriverWait以使所需元素可点击,您可以使用以下解决方案:
代码块:
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")
浏览器快照:
推荐阅读
- javascript - 将代码从功能性 React 钩子转换为类组件
- java - 解码来自 RestTemplate 的八位字节响应
- azure-devops - 使用 NUnit 在 Azure DevOps 中发布测试结果任务
- javascript - Google Cast 自定义发件人应用程序中的命名空间更改
- javascript - 如何将数据发布到对象数组中以对输入做出反应?使用反应钩子
- django - 将值从 Django 模板传递到 javascript-ajax 函数
- reactjs - 防止用户将图像粘贴到 CKEditor 5
- c++ - 为什么我的数据元素被复制而不是移动?
- python - 在功能强大的机器上创建 numpy 数组时出现 JupyterNotebook Python 内存错误,但在较弱的机器上工作正常
- mysql - 如何将 JOIN 转换为 IN 子句?