Скрапинг Selenium: смена часового пояса

Веб-сайт, на котором я запускаю свой безголовый (PhantomJS) браузер через Selenium, имеет другой часовой пояс, поэтому я получаю неправильные даты для многих записей. Таким образом, мои очищенные результаты показывают неправильные даты/время (я нахожусь в 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()

Но я не могу заставить его щелкнуть. Должен ли я вместо этого искать класс?


person noblerthanoedipus    schedule 07.03.2016    source источник
comment
В правом верхнем углу вы можете выбрать свой часовой пояс. Я считаю, что EST = GMT-5. Вы можете использовать селен, чтобы выбрать правильный часовой пояс из раскрывающегося списка. Это должно решить вашу проблему.   -  person Maecky    schedule 07.03.2016
comment
Понятно, теперь мне нужно решить, как это сделать с Selenium. Что-то вроде: Select(driver.find_element_by_class("selected")).select_by_value(15).click() ?   -  person noblerthanoedipus    schedule 08.03.2016


Ответы (2)


Просто перейдите по этому адресу:

driver.get('http://www.oddsportal.com/set-timezone/15/')
person grbk    schedule 20.03.2016
comment
Этот ответ помог больше, чем другой. Спасибо за ответ - person noblerthanoedipus; 21.03.2016

Лучшей идеей для тестирования является использование 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()
person Maecky    schedule 08.03.2016