我如何在 Python 到 select 日历日期中使用 selenium,因为 Python 不允许我点击任何东西,因为我无法点击列表?
How do I use selenium in Python to select a calendar date when Python won't let me click on anything because I can't click on lists?
我正在尝试单击此网站中的日历,以便我可以选择一个日期来查看该日期的天气:
第一步是单击日历图标以显示日历,这样我就可以单击日期。当我右键单击该图标并检查它时,这是代码:
<input name="ctl00$MainContentHolder$txtPastDate" type="date" value="2022-01-07" id="ctl00_MainContentHolder_txtPastDate" class="form-control">
我尝试在 Python:
from selenium import webdriver as wd
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup as bs
from pandas.io.html import read_html
driver=wd.Chrome()
driver.maximize_window()
driver.get('https://www.worldweatheronline.com/kaohsiung-weather-history/tai-wan/tw.aspx')
f=get_html(driver)
driver.implicitly_wait(10)
driver.find_elements_by_id('ctl00_MainContentHolder_txtPastDate').click()
我得到的是:
Traceback (most recent call last):
File "<ipython-input-113-f6eee7773e00>", line 5, in <module>
driver.find_elements_by_id('ctl00_MainContentHolder_txtPastDate').click()
AttributeError: 'list' object has no attribute 'click'
我似乎无法点击任何东西,因为每当我提取某些东西时,Python 将该东西保存为列表,而列表不会点击。
我正在使用 Python 3.7.4 和 Spyder 4.0.1
请注意 find_elements
return 网络元素列表,而不是单个网络元素。
此外,在 python list
上我们不能调用 .click
方法。解释你所遇到的错误。
所以不用
driver.find_elements_by_id('ctl00_MainContentHolder_txtPastDate').click()
使用这个:
driver.find_element_by_id('ctl00_MainContentHolder_txtPastDate').click()
好吧,如果您愿意,您也可以发送钥匙,并指定日期。并非每个网站都支持此功能(本网站有),但是当它存在时,您可以使用它。
您可以使用以下定位器策略。
driver.find_element(By.CSS_SELECTOR, "input[type='date']").send_keys("05-01-2022")
当然,不要将日期硬编码到代码中。将其保存在变量中。
wait=WebDriverWait(driver,30)
driver.get('https://www.worldweatheronline.com/kaohsiung-weather-history/tai-wan/tw.aspx')
wait.until(EC.element_to_be_clickable((By.XPATH,"//button[.='AGREE']"))).click()
element=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#ctl00_MainContentHolder_txtPastDate")))
value='2020-01-01'
driver.execute_script("arguments[0].setAttribute('value',arguments[1])",element, value)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"a.introjs-skipbutton"))).click()
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#ctl00_MainContentHolder_butShowPastWeather"))).click()
要设置该值,您可以使用 javascript 进行设置,但首先删除同意按钮,更改单位,然后点击显示过去的天气。
进口:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
我正在尝试单击此网站中的日历,以便我可以选择一个日期来查看该日期的天气:
第一步是单击日历图标以显示日历,这样我就可以单击日期。当我右键单击该图标并检查它时,这是代码:
<input name="ctl00$MainContentHolder$txtPastDate" type="date" value="2022-01-07" id="ctl00_MainContentHolder_txtPastDate" class="form-control">
我尝试在 Python:
from selenium import webdriver as wd
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup as bs
from pandas.io.html import read_html
driver=wd.Chrome()
driver.maximize_window()
driver.get('https://www.worldweatheronline.com/kaohsiung-weather-history/tai-wan/tw.aspx')
f=get_html(driver)
driver.implicitly_wait(10)
driver.find_elements_by_id('ctl00_MainContentHolder_txtPastDate').click()
我得到的是:
Traceback (most recent call last):
File "<ipython-input-113-f6eee7773e00>", line 5, in <module>
driver.find_elements_by_id('ctl00_MainContentHolder_txtPastDate').click()
AttributeError: 'list' object has no attribute 'click'
我似乎无法点击任何东西,因为每当我提取某些东西时,Python 将该东西保存为列表,而列表不会点击。
我正在使用 Python 3.7.4 和 Spyder 4.0.1
请注意 find_elements
return 网络元素列表,而不是单个网络元素。
此外,在 python list
上我们不能调用 .click
方法。解释你所遇到的错误。
所以不用
driver.find_elements_by_id('ctl00_MainContentHolder_txtPastDate').click()
使用这个:
driver.find_element_by_id('ctl00_MainContentHolder_txtPastDate').click()
好吧,如果您愿意,您也可以发送钥匙,并指定日期。并非每个网站都支持此功能(本网站有),但是当它存在时,您可以使用它。 您可以使用以下定位器策略。
driver.find_element(By.CSS_SELECTOR, "input[type='date']").send_keys("05-01-2022")
当然,不要将日期硬编码到代码中。将其保存在变量中。
wait=WebDriverWait(driver,30)
driver.get('https://www.worldweatheronline.com/kaohsiung-weather-history/tai-wan/tw.aspx')
wait.until(EC.element_to_be_clickable((By.XPATH,"//button[.='AGREE']"))).click()
element=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#ctl00_MainContentHolder_txtPastDate")))
value='2020-01-01'
driver.execute_script("arguments[0].setAttribute('value',arguments[1])",element, value)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"a.introjs-skipbutton"))).click()
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#ctl00_MainContentHolder_butShowPastWeather"))).click()
要设置该值,您可以使用 javascript 进行设置,但首先删除同意按钮,更改单位,然后点击显示过去的天气。
进口:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC