使用Python重新排序ESPN的草拟策略中的玩家

OD1*_*995 8 python selenium

我正在尝试使用Python和Selenium在我的幻想足球队的“预草稿策略”页面中对球员进行重新排序。登录并进入页面是可以的,但是尝试交换播放器会导致一些问题。

到目前为止,我已使用以下代码,但未成功:

import nfl_useful_functions as nfl
from selenium.webdriver import ActionChains
import time

## Login to ESPN
driver = nfl.login2espn()
## Go to draft strategy page
driver.get("http://fantasy.espn.com/football/editdraftstrategy?leagueId=123456")
## Wait 10 seconds
time.sleep(10)
## Choose the player to be dragged (player 1)
draggable = driver.find_element_by_xpath("/html[1]/body[1]/div[1]/div[1]/div[1]/div[1]/div[5]/div[2]/div[1]/div[1]/div[2]/div[2]/div[1]/div[2]/section[1]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/div[1]/div[2]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/table[1]/tbody[1]/tr[1]")
## Choose the player for player 1 to be dragged onto (and swapped with)
droppable = driver.find_element_by_xpath("/html[1]/body[1]/div[1]/div[1]/div[1]/div[1]/div[5]/div[2]/div[1]/div[1]/div[2]/div[2]/div[1]/div[2]/section[1]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/div[1]/div[2]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/table[1]/tbody[1]/tr[2]")
## Drag and drop
#Attempt 1
ActionChains(driver).drag_and_drop(draggable, droppable).perform()
#Attempt 2
ActionChains(driver).drag_and_drop_by_offset(draggable, 0, 40).perform()
#Attempt 3
ActionChains(driver).click_and_hold(draggable)\
                    .move_to_element(droppable)\
                    .release(draggable)\
                    .perform()
#Attempt 4
ActionChains(driver).click_and_hold(draggable)\
                    .move_to_element_with_offset(draggable,0,40)\
                    .release(draggable)\
                    .perform()
## Wait 5 seconds
time.sleep(5)
## Close driver
driver.close()
Run Code Online (Sandbox Code Playgroud)

我(分别)尝试了每种不同的尝试,但是唯一的(小)正面结果是,我尝试移动的玩家确实被选中了:

在此处输入图片说明

但是实际上没有任何结果。脚本每次都成功运行(我的意思是没有错误)。如上所述,我要拖动的播放器变灰了两三秒钟,然后似乎放弃了,脚本结束了。没有例外或任何东西。

还有什么我可以尝试的吗?理想情况下,除了我很乐意接受任何建议外,它仍将在Python中使用!根据Wappalyzer的说法,如果有用,该页面的详细信息为: 在此处输入图片说明

编辑

是我手动更换播放器时页面的外观。是我运行上述脚本(尝试1)时页面的外观。

编辑2

我已经在ESPN上创建了一个一次性帐户,以便更轻松地解决问题。使用od44@live.co.uk和Pa55word123 登录到ESPN Fantasy,然后转到“ 草稿前策略”页面

puc*_*hal 0

好的,所以我尝试重新创建问题,我注意到它实际上可以更改玩家的位置,但前提是鼠标光标位于另一个玩家上方。您可以在此处的视频中看到它

我尝试使用无头硒希望问题不会再次发生,但无头硒也失败了

因此,知道问题(除了硒之外)是光标的位置,我使用pyautogui将光标移动到我们想要放置播放器的位置:

from time import sleep

import pyautogui
from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
# logged in manually

## Choose the player to be dragged (player 1)
draggable = driver.find_element_by_xpath("//div[@title='Rank' and text()=1]")
## Choose the player for player 1 to be dragged onto (and swapped with)
droppable = driver.find_element_by_xpath("//div[@title='Rank' and text()=2]")

pyautogui.moveTo(droppable.location['x'], droppable.location['y'])
sleep(0.1)
ActionChains(driver).drag_and_drop(draggable, droppable).perform()

Run Code Online (Sandbox Code Playgroud)

这个“黑客”对我有用。您可以在此处通过视频查看其工作原理

重要的提示!

即使这有效(记住使用没有工具栏的硒,这样Y位置就不需要调整)。这不是完美的解决方案,因为您需要移动光标,在完美的世界中您可以只使用拖放方法。但如果你认为它对你的个人项目有用,我想你可以这么做