Подождите, пока задача не будет выполнена с Selenium WebDriver для Python - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь сгенерировать 1000 лучших команд за ночь: https://www.fantasycruncher.com/lineup-rewind/draftkings/NHL/2019-02-03

Однако возможно создать только 500 команд за одну итерацию.Поэтому мне нужно нажать на кнопку Calculate 500 more teams, но эта кнопка перестает работать, когда браузер генерирует первые 500 команд.Поэтому мне нужно подождать, пока браузер завершит генерацию команд, и кнопка переключится обратно на Calculate 500 more teams с показанной ожидающей кнопки Stop.

Я пытался дождаться появления кнопки Calculate с:

WebDriverWait(driver, 1000).until(EC.presence_of_element_located((By.CLASS_NAME, "calc-more-teams")))

Или можно нажать:

calulatemorebutton=WebDriverWait(driver, 10000).until(EC.element_to_be_clickable((By.CLASS_NAME, "calc-more-teams")))

Но я всегда получаю сообщение WebDriverExceptionчто кнопка не активна в точке ... Глядя на панель элементов (щелкнув осмотреть), я чувствую, что кнопка Calculate 500 more teams всегда есть, но при генерации браузера появляется предупреждение Stopкоманды, и поэтому я должен действовать по-другому.Я пытаюсь подождать, пока это предупреждение не отобразится, но не удалось.

Здесь код работает, но только с несколькими сгенерированными командами.Код работает, потому что я добавляю немного time.sleep().Однако, если вы увеличите количество сгенерированных команд, потребуется webDriverwait, а код не будет работать ...

from selenium import webdriver
import csv
from selenium.webdriver.support.ui import Select
from datetime import date, timedelta
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
from selenium.webdriver.common.keys import Keys


chromedriver =("C:/Users/Michel/Desktop/python/package/chromedriver_win32/chromedriver.exe")
driver = webdriver.Chrome(chromedriver)

driver.get("https://www.fantasycruncher.com/lineup-rewind/draftkings/NHL/2019-02-03")

time.sleep(10)
closeButton = driver.find_element_by_class_name('close-login-alert')
closeButton.click()


# Generate lineups

Calculate_button = driver.find_element_by_id('calc-team')
select = Select(driver.find_element_by_id('select-objective'))
select.select_by_value("Actual_Pts")
lineups_textbox = driver.find_element_by_id('numOfLineups')
lineups_textbox.send_keys("10")
Calculate_button.click()

time.sleep(10)

closeButton2 = driver.find_element_by_class_name('swal2-confirm')
closeButton2.click()


# Calculate 500 more    
more = driver.find_element_by_class_name("run-results")
idid=more.get_attribute("id")
realid=idid+"-slider-input"
moremore=driver.find_element_by_id(realid)
moremore.clear()
moremore.send_keys("5")
time.sleep(10)
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "calc-more-teams")))
calulatemorebutton=driver.find_element_by_class_name("calc-more-teams")
calulatemorebutton.click()

# # download csv    
WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH , '//div[@data-action="downloadPlayerlist"]')))

download_button = driver.find_element_by_class_name(' export-csv-dropdown')
download_button.click()
csv= driver.find_element_by_xpath("//div[@data-optid='export']")
csv.click()

time.sleep(5)
driver.close()

Я ожидаю, что будет сгенерировано 1000 команд, и загрузите файл CSV, соответствующий, но я не могу сгенерировать "500" больше, ожидая, пока браузер сгенерирует первую группу из 500 команд, и поэтому кнопка Stop переключится на Calulate more.

1 Ответ

0 голосов
/ 14 февраля 2019

Как вы правильно сказали, обе кнопки («Стоп» и «Вычислить # больше команд») всегда являются частью DOM, но обычно кнопка «Стоп» скрыта, если для ее атрибута «style» установлено значение display:none.Мы можем использовать это для определения вашего состояния.

После того, как вы нажали кнопку «Рассчитать еще 500 команд», вы можете позвонить по ней, чтобы дождаться исчезновения кнопки «Стоп».

from selenium.common.exceptions import TimeoutException
try:
    WebDriverWait(driver, 60).until(EC.invisibility_of_element_located((By.CSS_SELECTOR, ".button.expand.stop-calc.alert")))
except TimeoutException:
    print("Did not load in time")
else:
    #download_your_csv
...