能够清除文本框,但无法发送新文本

2024-06-16 11:22:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python selenium从网站中提取表。在网页中,我需要选择所需的日期。对于日和月,有两个下拉框。对于这两个,我使用css选择器并能够选择日期和月份。但问题在于这一年。它是一个文本框,当前年份的默认值为“2020”。因此,首先我只是尝试发送“2019”作为输入。但这不起作用,返回默认页面数据,即当前日期数据

然后我尝试清除文本框,然后将输入作为“2019”发送。此方法返回一个带有NAN的表。我如何将2019年作为年度输入发送

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from datetime import datetime, timedelta
from math import ceil
import pandas as pd
import numpy as np
from time import time, sleep
import re

CHROMEDRIVER_PATH = '/path /to/chromedriver'

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(CHROMEDRIVER_PATH, chrome_options=options)

driver.get("URL")
# date = datetime.now() - timedelta(days=1)
date = datetime(2019,11,4)
year = date.strftime("%Y")
month = date.strftime("%m")
day = date.strftime("%d")
date = date.strftime("%Y-%m-%d")

driver.find_element_by_css_selector("#ContentPlaceHolder2_txtyear").clear() #Clear the default value from the box
sleep(1)
driver.find_element_by_css_selector("#ContentPlaceHolder2_txtyear").send_keys(year) #Send the year as a string
sleep(1)
driver.find_element_by_css_selector("#ContentPlaceHolder2_txtyear").send_keys(Keys.ENTER) #Hit enter after sending the key
sleep(1)

driver.find_element_by_css_selector("#ContentPlaceHolder2_ddmonth").send_keys(month) #Send input for month
driver.find_element_by_css_selector("#ContentPlaceHolder2_ddday").send_keys(day) # send input for day

html = driver.page_source

pd.read_html(html)[0]

编辑:源代码中的年份文本框元素如下所示:

<input name="ctl00$ContentPlaceHolder2$txtyear"
       type="text"
       value="2020"
       onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder2$txtyear\',\'\')', 0)"
       onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;"
       id="ContentPlaceHolder2_txtyear"
       style="height:16px;width:46px;margin-left: 0px">

Tags: fromimportsenddatebydriverseleniumelement
1条回答
网友
1楼 · 发布于 2024-06-16 11:22:04

所需元素的相关HTML本可以帮助我们更好地分析问题

但是,要在元素上定位和调用click()/clear()/send_keys(),您需要为element_to_be_clickable()诱导WebDriverWait,并且可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#ContentPlaceHolder2_txtyear")))
    element.click()
    element.clear()
    element.send_keys("user11593389")
    
  • 使用XPATH

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='ContentPlaceHolder2_txtyear']")))
    element.click()
    element.clear()
    element.send_keys("user11593389")
    
  • 注意:您必须添加以下导入:

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

相关问题 更多 >