首页 > 解决方案 > 如何在使用 Selenium 和 Python 自动填充其默认文本之前填充 javascript 小部件

问题描述

我正在尝试填写 javascript 小部件的日期,然后下载指定日期的数据。使用 clear() 或 Ctrl+a Delete 都会清空文本字段,但是,当发送包含日期的字符串时,小部件会自动填充默认日期并忽略发送给它的键。任何人都可以帮助我正确填写小部件的日期吗?

import requests
import re
import time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys as KEYS

url ='https://rtba.spectraenergy.com/InformationalPosting/Default.aspx?bu=TE&Type=OA'
driver = webdriver.Chrome('D:/Program Setup Files/chromedriver.exe')
driver.get(url)

date = driver.find_element_by_xpath('//*[@id="ctl00_MainContent_ctl01_oaDefault_ucDate_rdpDate_dateInput_text"]')
# ActionChains(driver).click(date).send_keys("1/1/2020").perform()
ActionChains(driver).click(date).key_down(KEYS.CONTROL).send_keys("a").send_keys(KEYS.DELETE).send_keys("1/1/2020").perform()

# Find the button, call it downloadEXCEL
downloadEXCEL = driver.find_element_by_partial_link_text('Downloadable Format')
ActionChains(driver).click(downloadEXCEL).perform()                         # Click the button

我知道 send_keys 正在工作,因为这里的注释行

# ActionChains(driver).click(date).send_keys("1/1/2020").perform()

将发送日期,该字段将包含两个连接的日期。

标签: pythonseleniumweb-scrapingbeautifulsoup

解决方案


可以这么说,我只需要“让我的手指失去控制”

ActionChains(driver).click(date).key_down(KEYS.CONTROL).send_keys("a").key_up(KEYS.CONTROL).send_keys("1/1/2020").send_keys(KEYS.RETURN).perform()

在我完成 'CTRL + a' 之后使用 key_up(KEYS.CONTROL) 就可以了。


推荐阅读