我正在嘗試單擊此網站中的日歷,以便我可以選擇一個日期來查看該日期的天氣:
關聯
第一步是單擊日歷圖示,以便顯示日歷,以便我可以單擊日期。當我右鍵單擊圖示并檢查它時,這是代碼:
<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
uj5u.com熱心網友回復:
請注意,find_elements回傳 Web 元素串列,而不是單個 Web 元素。
此外,在 python 上,list我們不能呼叫.click方法。這解釋了你遇到的錯誤。
所以而不是
driver.find_elements_by_id('ctl00_MainContentHolder_txtPastDate').click()
用這個:
driver.find_element_by_id('ctl00_MainContentHolder_txtPastDate').click()
uj5u.com熱心網友回復:
好吧,如果您愿意,您也可以發送密鑰,并附上所需的日期。并非每個網站都提供此功能(本網站也有),但當它存在時,您可以使用它。您可以使用以下定位器策略。
driver.find_element(By.CSS_SELECTOR, "input[type='date']").send_keys("05-01-2022")
當然,不要將日期硬編碼到代碼中。將其保存在變數中。
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/406020.html
標籤:
上一篇:PythonSeleniumTimeoutException錯誤,即使等待直到可點擊并且TimeoutException除外:
下一篇:找出兩個方程的可能值
