python - 使用 Selenium 进行 Python Web 抓取 - “onclick”下载
问题描述
我正在尝试编写一个脚本,该脚本使用 selenium 来下载包含不同 NHL 播放器信息的文件。我想下载一组不同日期的文件。URL 结尾是日期,例如: https ://www.fantasycruncher.com/lineup-rewind/draftkings/NHL/2018-10-29
此外,还有一个下拉菜单可以选择每页显示的行数。因此,我创建了一个循环来遍历日期集并在一页上显示所有行。
最后,有一个名为“操作”的下拉菜单,其中一个选项是:下载播放器列表。因此,我想在我的循环中单击该选项,该选项将下载 CSV 文件。
这是我当前的代码:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from datetime import date, timedelta
chromedriver =
("C:/Users/Michel/Desktop/python/package/chromedriver_win32/chromedriver.exe")
driver = webdriver.Chrome(chromedriver)
DFS = []
calendar= []
calendar.append("2018-10-30")
calendar.append("2018-10-31")
for d in calendar:
driver.get("https://www.fantasycruncher.com/lineup-rewind/draftkings/NHL/"+ d)
select = Select(driver.find_element_by_name('ff_length'))
select.select_by_value("-1")
driver.close()
我试图在选择“-1”后生成点击。这是“下载播放器列表”选项的源代码
<div class="table-actions-option" data-action="downloadPlayerlist" onclick="return true;">Download Player List</div>
如何生成点击下载列表?
然后,我打算访问 C:\Users\Downloads 中的下载文件。有可能还是我需要添加一些代码行?
谢谢,
解决方案
您需要显示元素Download Player List
,但有延迟,因此您需要在显示时等待。
from selenium import webdriver
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
chromedriver = ("C:/Users/Michel/Desktop/python/package/chromedriver_win32/chromedriver.exe")
options = webdriver.ChromeOptions()
options.add_argument("download.default_directory=C:/Users/Downloads")
# or
# prefs = {'download.default_directory' : 'C:/Users/Downloads'}
# options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chromedriver, chrome_options=options)
DFS = []
calendar= []
calendar.append("2018-10-30")
calendar.append("2018-10-31")
for d in calendar:
driver.get("https://www.fantasycruncher.com/lineup-rewind/draftkings/NHL/"+ d)
closeButton = driver.find_element_by_class_name('close-login-alert')
closeButton.click()
select = Select(driver.find_element_by_name('ff_length'))
select.select_by_value("-1")
actions = driver.find_element_by_id('table-actions')
actions.click()
WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH , '//div[@data-action="downloadPlayerlist"]')))
downloadPlayerlist = driver.find_element_by_xpath('//div[@data-action="downloadPlayerlist"]')
downloadPlayerlist.click()
# remove the comment below to close the browser
#driver.close()