gpt4 book ai didi

python - 使用 Python 在 ESPN 的选秀前策略中重新排序球员

转载 作者:太空狗 更新时间:2023-10-29 21:11:33 25 4
gpt4 key购买 nike

我正在尝试使用 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()

我已经(单独)尝试了每一种不同的尝试,但唯一(小)积极的是我试图移动的玩家似乎确实被选中了:

enter image description here

但实际上并没有什么结果。该脚本每次都成功运行(我的意思是没有错误)。如上所述,我试图拖动的播放器变灰两三秒,然后似乎放弃并且脚本结束。没有异常(exception)或任何事情。

还有什么我可以尝试的吗?理想情况下,它仍将使用 Python,除此之外我对任何建议都持开放态度!根据 Wappalyzer 的说法,如果它有用,相关页面的详细信息是: enter image description here

编辑

This 是我手动交换玩家时页面的样子。 This 是我运行上面的脚本(尝试 1)时页面的外观。

编辑 2

我在 ESPN 上创建了一个一次性帐户,以便更轻松地重现问题。使用 od44@live.co.uk 和 Pa55word123 登录到 ESPN Fantasy,然后转到 Pre-Draft Strategy Page

最佳答案

好吧,所以我尝试重现这个问题,我注意到它实际上可以改变玩家的位置,但前提是鼠标光标位于另一个玩家上方。您可以在视频中看到它 here

我已经尝试使用 headless selenium 希望问题不会再次发生但是 headless selenium 也失败了

所以知道问题(除了 selenium)是我使用的光标位置 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()

这个“hack”对我有用。您可以在视频中看到它是如何工作的 here

重要提示!

尽管这有效(请记住使用不带工具栏的 selenium,因此不需要调整 Y 位置)。这不是完美的解决方案,因为您需要移动光标,在完美的世界中,您可以只使用 drag_and_drop 方法。但如果你认为它对你的个人项目有用,我认为你可以去做

关于python - 使用 Python 在 ESPN 的选秀前策略中重新排序球员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57386820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com