【问题标题】:Selenium scraping: changing timezone硒刮:改变时区
【发布时间】:2016-06-21 06:10:27
【问题描述】:

我通过 Selenium 运行无头 (PhantomJS) 浏览器的网站具有不同的时区,因此我得到了许多条目的错误日期。因此,我的抓取结果显示了错误的日期/时间(我在 EST,看起来网站默认为 GMT)。

我正在从this 网站上抓取信息。您可以通过 SO here 上的上一个问题了解我是如何抓取日期的。但是请注意,我目前没有抓取游戏的时间,所以我不想将其合并到解决方案中。

here 提出了同样的问题,但我不知道如何测试“明显”的解决方案来检查网站默认的时间。我想有人会向客户请求时间并从我当前的时间中添加/减去小时数?有人可以告诉我该怎么做和/或是否有更好的方法。

编辑:我想要将网站抓取的数据从默认 (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()

但我无法点击它。我应该改为搜索课程吗?

【问题讨论】:

  • 在右上角您可以选择您的时区。我相信 EST = GMT-5。您可以使用 selenium 从下拉列表中选择正确的时区。这应该可以解决您的问题。
  • 知道了,现在我需要弄清楚如何使用 Selenium 来做到这一点。比如:Select(driver.find_element_by_class("selected")).select_by_value(15).click() ?

标签: python selenium timezone phantomjs headless-browser


【解决方案1】:

更好的测试方法是使用 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()

【讨论】:

    【解决方案2】:

    只要去那个网址:

    driver.get('http://www.oddsportal.com/set-timezone/15/')
    

    【讨论】:

    • 这个答案比另一个答案更有帮助。感谢回复
    猜你喜欢
    • 2020-08-23
    • 2017-06-18
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多