我尝试生成当晚的 1000 支最佳球队:https://www.fantasycruncher.com/lineup-rewind/draftkings/NHL/2019-02-03
但是,每次迭代只能生成 500 个团队。因此,我需要单击按钮 Calculate 500 more teams,但是一旦浏览器生成前 500 个团队,该按钮就会停止。因此,我需要等待浏览器完成生成团队,然后按钮从显示的待处理 Stop 按钮切换回 Calculate 500 more teams。
我试着等到 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' 和 'Calculate # more teams')始终是 DOM 的一部分,但通常通过将其 'style' 属性保留为 display 来隐藏“Stop”按钮:无。我们可以使用它来确定您的状况。
单击“计算 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
