2 回答

TA贡献1836条经验 获得超4个赞
你有很多错误,但主要是你的
find_elements_by_id('msw-js-tide-list')
它为您提供了所有日期作为一个元素的表格。
你应该在最后使用更复杂的xpathwith来将每一天作为单独的元素 - 然后你可以过滤它。/div
find_elements_by_xpath('//*[@id="msw-js-tide-list"]/div')
您不必添加+1到Day_of_Week因为python开始索引0
如果你想得到明天然后更好地使用
tomorrow = today + datetime.timedelta(days=1)
0或者当你得到时使用模数移动到7
Break_Key = (Day_of_Week + 1) % 7
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import datetime
days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
today = datetime.datetime.today()
#tomorrow = today + datetime.timedelta(days=1)
#day_of_week = tomorrow.weekday()
day_of_week = today.weekday()
selected_day = days[day_of_week]
driver = webdriver.Chrome('/Users/judeslater/Downloads/chromedriver')
#driver = webdriver.Firefox()
driver.get('https://magicseaweed.com/Nosara-Surf-Report/445/Tide/')
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="msw-js-tide-list"]')))
all_days = driver.find_elements_by_xpath('//*[@id="msw-js-tide-list"]/div')
for ocean_data in all_days:
if selected_day in ocean_data.text:
print(ocean_data.text)
break
driver.quit()
如果您想要今天的数据,那么它可能始终是表格中的第一天,因此您all_days[1]无需检查即可使用selected_day
隐藏div在 HTML 中,所以我必须使用[1]而不是来[0]获取今天的数据。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import datetime
driver = webdriver.Chrome('/Users/judeslater/Downloads/chromedriver')
#driver = webdriver.Firefox()
driver.get('https://magicseaweed.com/Nosara-Surf-Report/445/Tide/')
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="msw-js-tide-list"]')))
all_days = driver.find_elements_by_xpath('//*[@id="msw-js-tide-list"]/div')
ocean_data = all_days[1] # there is one hidden `div` which I have to skip to get today's data
print(ocean_data.text)
driver.quit()
我可以使用[2]in做同样的事情xpath(因为python开始索引0但xpath开始于1)并在 word 中使用find_element_...without char只得到一个结果selement
ocean_data = driver.find_element_by_xpath('//*[@id="msw-js-tide-list"]/div[2]')
print(ocean_data.text)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import datetime
driver = webdriver.Chrome('/Users/judeslater/Downloads/chromedriver')
#driver = webdriver.Firefox()
driver.get('https://magicseaweed.com/Nosara-Surf-Report/445/Tide/')
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="msw-js-tide-list"]')))
ocean_data = driver.find_element_by_xpath('//*[@id="msw-js-tide-list"]/div[2]')
print(ocean_data.text)
driver.quit()

TA贡献1829条经验 获得超7个赞
for value in element:
为什么不使用 element[0] 而不是这个 for 循环,因为您只需要该列表的第一个元素('msw-js-tide-list'),它给出了今天的日期。
Ocean_Data = element[0]
print(Ocean_Data.text)
time.sleep(1)
if contains_word(str(Ocean_Data), days[Break_Key]) == True:
break
添加回答
举报