我正在尝试使用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,然后转到“ 草稿前策略”页面。
好的,所以我尝试重新创建问题,我注意到它实际上可以更改玩家的位置,但前提是鼠标光标位于另一个玩家上方。您可以在此处的视频中看到它
我尝试使用无头硒希望问题不会再次发生,但无头硒也失败了
因此,知道问题(除了硒之外)是光标的位置,我使用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位置就不需要调整)。这不是完美的解决方案,因为您需要移动光标,在完美的世界中您可以只使用拖放方法。但如果你认为它对你的个人项目有用,我想你可以这么做
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |