下面的以下站點最近更新了他們的 UI,我現有的代碼由于我無法弄清楚的原因不再起作用。我的函式 (proline_go_to_match1) 用于使用我傳遞團隊名稱的 PARTIAL_LINK_TEXT 選擇并單擊游戲。團隊名稱存在于鏈接中,但是我收到下面粘貼的錯誤訊息。我已經包含了我的代碼片段,如果有人知道為什么會發生這種情況以及如何解決它,我將不勝感激。
非常感謝!
網站:
uj5u.com熱心網友回復:
看來你已經夠近了。
而不是present_of_element_located ()您需要為element_to_be_clickable()誘導WebDriverWait并且您可以使用以下定位器策略:
使用PARTIAL_LINK_TEXT:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, f"{capitalized_team}"))).click()使用XPATH:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(., '" capitalized_team "')]"))).click()
更新
阻止您點擊的是 cookie 橫幅內容

解決方案
您需要接受 cookie:
driver.get("https://prolineplus.olg.ca/en-ca/event-path/?p23795-NBA")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.cc-btn.cc-dismiss"))).click()
capitalized_team = "TORONTO RAPTORS"
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, f"{capitalized_team}"))).click()
瀏覽器快照:

uj5u.com熱心網友回復:
不確定這是否有用,但您可以從 api 而不是 Selenium 獲取資料:
import requests
import pandas as pd
import re
# pip install choice
import choice
url = 'https://www.online.polg.abpo.io/metal/v3/sportsbookdata/current/events/usview'
headers = {
'X-LVS-HSToken': '9aBYBhGVpb9NCGAmideXXVg4OOns72-U1tVMKw9vWyFftWb69mYm8TUWzepu-MgXcR1TOjgDJW0x_na5eW9ySoDuV4MsBe8j0N8P-ylZeHt82zVkbB3fNUUYmwV1gUmPxWlGtFi7DZRDMbbLAOJ18g=='
}
payload = {
'eventPathIds': '23795',
'eventsPerPage': '5',
'pageIndex': '0'}
jsonData = requests.get(url, params=payload, headers=headers).json()
eventData = []
for k, v in jsonData['items'].items():
if 'e' in k:
temp_dict = v.copy()
temp_dict.update({'eventId':k})
eventData.append(temp_dict)
eventIds = {each['desc']:each['eventId'] for each in eventData}
game = choice.Menu(list(eventIds.keys())).ask()
eventId = re.search('(\d.*)', eventIds[game]).group(1)
url = f'https://www.online.polg.abpo.io/metal/v3/sportsbookdata/current/events/{eventId}'
payload= {'extraMarkets': 'true'}
jsonData = requests.get(url, params=payload, headers=headers).json()
results_df = pd.json_normalize(jsonData['items'].values())
輸出:
Make a choice:
0: Dallas Mavericks @ Detroit Pistons
1: Brooklyn Nets @ New York Knicks
2: Boston Celtics @ Chicago Bulls
3: Washington Wizards @ Atlanta Hawks
4: Oklahoma City Thunder @ Utah Jazz
Enter number or name; return for next page
? 2
print(results_df)
type parent ... teamId teamDescription
0 EventDataItem p23795 ... NaN NaN
1 MarketDataItem e110254 ... NaN NaN
2 MarketDataItem e110254 ... NaN NaN
3 MarketDataItem e110254 ... NaN NaN
4 MarketDataItem e110254 ... NaN NaN
.. ... ... ... ... ...
75 OutcomeDataItem m8985345 ... 20748.0 Chicago Bulls
76 OutcomeDataItem m8985345 ... 20748.0 Chicago Bulls
77 OutcomeDataItem m8985345 ... 20748.0 Chicago Bulls
78 OutcomeDataItem m8985345 ... 20748.0 Chicago Bulls
79 OutcomeDataItem m8985345 ... 20748.0 Chicago Bulls
[80 rows x 46 columns]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/456917.html
