我通过Selenium运行无头(PhantomJS)浏览器的网站具有不同的时区,因此我在许多条目中都得到了错误的日期。因此,我抓取的结果显示错误的日期/时间(我在 EST,看起来网站默认是 GMT)。
我正在从这个网站上抓取。您可以在此处通过之前关于SO的问题了解我如何抓取日期。请注意,但是我目前没有抓取游戏时间,所以我不想将其合并到解决方案中。
这里问了同样的问题,但我不知道如何测试检查网站默认时间的"明显"解决方案。我想有人会向客户请求一个时间并从我当前时间中添加/减去小时数?有人可以告诉我如何做到这一点和/或是否有更好的方法。
编辑:我想要的是将网站抓取的数据从默认值(GMT)更改为我的时间(EST)。这将避免因增加时间而烦恼;日期将反映它们对我来说是什么。
据我所知,这是:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
#from selenium.webdriver.support.select import Select
driver = webdriver.PhantomJS(executable_path=r'C:/phantomjs.exe')
driver.get('http://www.oddsportal.com/hockey/usa/nhl/results/')
zoneDropDownID = "timezone-content"
driver.implicitly_wait(5)
zoneDropDownElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id(zoneDropDownID))
# Select(zoneDropDownID).select_by_visible_text("Eastern") # strobject has no attribute
test = zoneDropDownID.select_by_visible_text("Eastern").click() # TimeOut exception - not found
driver.close()
但我无法让它点击。我应该搜索课程吗?
更好的测试方法是使用chromedriver或类似的东西。好处是,您可以直观地检查脚本正在做什么。下面是一个示例代码(没有错误处理),可以执行您想要的操作。请注意,chromedriver.exe必须与脚本位于同一位置。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("--lang=en")
chrome = webdriver.Chrome(chrome_options=chrome_options)
wait = WebDriverWait(chrome, 300)
import time
chrome.get("http://www.oddsportal.com/hockey/usa/nhl/results/")
dropdown = wait.until(EC.presence_of_element_located((By.ID,"user-header-timezone-expander")))
dropdown.click()
userHeader = chrome.find_element_by_id('user-header-timezone')
time.sleep(2)
ahref = userHeader.find_elements_by_tag_name('a')
for a in ahref:
print(a.get_attribute("text"))
if "Eastern Time" in a.get_attribute('text'):
a.click()
time.sleep(10)
chrome.close()
只需转到该网址:
driver.get('http://www.oddsportal.com/set-timezone/15/')