2016-03-07 1 views
2

Le site Web Je cours mon navigateur sans tête (PhantomJS) à travers Selenium a un fuseau horaire différent donc je reçois les mauvaises dates pour de nombreuses entrées. Ainsi, mes résultats éraflés montrent les mauvaises dates/heures (je suis en EST, on dirait que le site par défaut est GMT).Selenium scraping: changer le fuseau horaire

Je suis en train de gratter depuis le site Web this. Vous pouvez avoir une idée de comment je racle des dates à travers une question précédente sur SO here. Notez cependant que je ne suis pas en train de gratter le temps des jeux, donc je préfère ne pas l'incorporer dans une solution.

La même question est posée here mais je ne sais pas comment tester la solution «évidente» de vérifier pour voir à quelle heure le site Web est par défaut. Je suppose que l'on demanderait une heure au client et que j'ajouterais/soustrais des heures de mon temps actuel? Quelqu'un peut-il me dire comment faire et/ou s'il y a un meilleur moyen?

Editer: ce que je veux, c'est changer les données du site gratté de la valeur par défaut (GMT) à mon temps (EST). Cela évitera d'avoir à ajouter des heures supplémentaires; les dates refléteront ce qu'elles sont pour moi.

est ici aussi loin que je suis devenu:

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() 

Mais je ne peux pas à cliquer. Dois-je chercher un cours à la place?

+1

Dans le coin supérieur droit, vous pouvez sélectionner votre fuseau horaire. Je crois EST = GMT-5. Vous pouvez utiliser le sélénium pour sélectionner le bon fuseau horaire dans la liste déroulante. Cela devrait résoudre votre problème. – Maecky

+0

J'ai compris, maintenant je dois trouver comment faire avec Selenium. Quelque chose comme: 'Select (driver.find_element_by_class (" selected ")). Select_by_value (15) .click()'? – noblerthanoedipus

Répondre

1

Il suffit d'aller à cette url:

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

Cette réponse a aidé plus que l'autre. Merci d'avoir répondu – noblerthanoedipus

3

Une meilleure idée pour tester est d'utiliser un chromedriver ou quelque chose de similaire. L'avantage est que vous pouvez vérifier visuellement ce que fait votre script. Voici un exemple de code (sans errohandling) qui fait ce que vous voulez. Veuillez noter que le chromedriver.exe doit se trouver au même emplacement que le script.

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()