我已成功导航到一个网站页面,该页面有多个指向更多页面的链接。在我的代码中,我计算链接的数量,然后将其转换为 xpath,这样我就可以输入所有页面。一切都很好,直到我尝试从这些页面中获取任何内容。它们都具有精确的外形尺寸,因此我应该能够在页面内使用相同的 xpath。 ** 这是失败的代码部分:**
xpath_expression = '//*[@id="wrapper"]/main/section/div/div[2]/table/tbody'
element = browser.find_element("xpath", xpath_expression)
html_code = element.get_attribute("outerHTML")
number_of_pages_to_enter= html_code.count("<tr")
number_of_pages_to_enter=number_of_pages_to_enter-2
xpatht_eleje='//*[@id="wrapper"]/main/section/div/div[2]/table/tbody/tr['
cimek=''
for i in range(number_of_pages_to_enter):
number_of_pages_to_enter_str=str(number_of_pages_to_enter)
number_of_pages_to_enter_str=number_of_pages_to_enter_str+"]/td[3]/a"
xpath_expression=xpatht_eleje+number_of_pages_to_enter_str
button_locator = ("xpath", xpath_expression)
button = WebDriverWait(browser, 5).until(
EC.presence_of_element_located(button_locator)
)
button.click()
time.sleep(0.5)
element = browser.find_element(By.XPATH, '//*[@id="eventHeader"]/div[2]/div/h1')
cim=element.text
cimek=cim+cim
if number_of_pages_to_enter>0:
number_of_pages_to_enter=number_of_pages_to_enter-1
browser.back()
这是我正在测试代码的页面的链接:text 名为 cimek 的字符串是我尝试收集数据的地方。
我已经尝试过使用其他定位器,然后是 xpath,但都不起作用。我得到的结果只是一个元素。
问题的根源在于您正在使用
循环遍历所有行for i in range(number_of_pages_to_enter):
但是您没有使用
i
,您正在使用 number_of_pages_to_enter
。
话虽如此,当有更简单的方法时,您会花费大量时间/代码解析、计算、构建字符串等来循环遍历表。您只需为所需的元素构建一个定位器,使用
find_elements(locator)
,然后循环遍历该组元素即可。
此外,您还可以单击链接进入下一页以了解谁正在玩游戏,例如“克利夫兰 - 达拉斯”,但该信息已经在第一页上。
Kosárlabda, NBA
Cleveland - Dallas <<<
02.27. 18:00
我修改了您的代码,让您无需单击任何内容、离开页面并返回等即可获得此信息。
url = 'https://www.tippmix.hu/sportfogadas#?q=nba&page=1'
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url)
wait = WebDriverWait(driver, 10)
games = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//tbody/tr/td[3][@class='title']/a")))
for game in games:
print(game.text.split("\n")[1])
输出
Cleveland - Dallas
Washington - Golden State
Orlando - Brooklyn
New York - New Orleans
Atlanta - Utah
Boston - Philadelphia
Milwaukee - Charlotte
Chicago - Detroit
Minnesota - San Antonio
Oklahoma City - Houston
Portland - Miami
Hard - Bärnbach/Köflach
NBA 2023/24
当有可以从中获取数据的公共 API 时,不要使用 Selenium。不确定您到底想要什么,但我将 json 返回转储到表中以显示您在此请求中得到的内容:
import requests
url = 'https://api.tippmix.hu/tippmix/search'
payload = {
"fieldValue":"nba",
"sportId":0,
"competitionGroupId":0,
"competitionId":0,
"competitionType":"",
"type":0,
"date":"0001-01-01T00:00:00.000Z",
"hitsPerPage":9999,
"page":1,
"minOdds":"",
"maxOdds":""}
jsonData = requests.post(url, json=payload).json()
输出:
import pandas as pd
df = pd.json_normalize(jsonData,
record_path =['data','events'])
表格:(此处仅显示前 3 行)
print(df.head(3).to_string())
eventId eventName matchStatus eventDate eventVersion bettingStatus betradarId sportId sportName competitionId competitionName competitionGroupId competitionGroupName competitions isLive isOutright bettingPhase hasVisiblePrematchMarket remainingPrematchMarketCount hasVisibleLiveMarket remainingLiveMarketCount eventParticipants competitionClosedCombinations eventClosedCombinations liveStreamAvailable liveStreamEventId liveStreamProviderId webNote competitionGroupRefId competitionRefId markets
0 3355538 Philadelphia - Charlotte 2024-03-02T01:00:00+01:00 1006964418 0 43066949 2 Kosárlabda 1296 NBA 199 USA [{'type': 'competition', 'id': 1296, 'name': 'NBA'}] 0 0 0 True 68 False 0 [{'participantName': 'Philadelphia', 'participantId': 11869}, {'participantName': 'Charlotte', 'participantId': 2914}] [{'cCGroupIds': [1], 'competitionId': 1299}, {'cCGroupIds': [1], 'competitionId': 42617}] None False 0 15 177 [{'marketId': 72774773, 'marketName': 'A mérkőzés győztese', 'marketType': 1, 'marketStatus': 1, 'channelWeb': 1, 'channelRetailer': 1, 'marketVersion': 1006954130, 'marketSubType': 2, 'minCombiCount': 1, 'minCombiCountLrt': 1, 'maxCombiCount': 2147483647, 'marketTypePriority': 2, 'marketTypeCCGroups': [1], 'mainMarket': 1, 'specialOddsValue': '', 'winnerOutcomeName': '', 'marketClosedCombinations': [], 'roundId': 0, 'outcomes': [{'outcomeNo': 1, 'outcomeName': 'Philadelphia', 'fixedOdds': 1.15, 'outcomeResult': 1, 'outcomeRealNo': '01'}, {'outcomeNo': 2, 'outcomeName': 'Charlotte', 'fixedOdds': 4.8, 'outcomeResult': 1, 'outcomeRealNo': '02'}], 'outcomeCount': 2, 'marketRealNo': '04525'}]
1 3355540 Detroit - Cleveland 2024-03-02T01:00:00+01:00 1006954126 0 43066947 2 Kosárlabda 1296 NBA 199 USA [{'type': 'competition', 'id': 1296, 'name': 'NBA'}] 0 0 0 True 50 False 0 [{'participantName': 'Detroit', 'participantId': 3876}, {'participantName': 'Cleveland', 'participantId': 3113}] [{'cCGroupIds': [1], 'competitionId': 1299}, {'cCGroupIds': [1], 'competitionId': 42617}] None False 0 15 177 [{'marketId': 72773000, 'marketName': 'A mérkőzés győztese', 'marketType': 1, 'marketStatus': 1, 'channelWeb': 1, 'channelRetailer': 1, 'marketVersion': 1006953998, 'marketSubType': 2, 'minCombiCount': 1, 'minCombiCountLrt': 1, 'maxCombiCount': 2147483647, 'marketTypePriority': 2, 'marketTypeCCGroups': [1], 'mainMarket': 1, 'specialOddsValue': '', 'winnerOutcomeName': '', 'marketClosedCombinations': [], 'roundId': 0, 'outcomes': [{'outcomeNo': 1, 'outcomeName': 'Detroit', 'fixedOdds': 3.9, 'outcomeResult': 1, 'outcomeRealNo': '01'}, {'outcomeNo': 2, 'outcomeName': 'Cleveland', 'fixedOdds': 1.22, 'outcomeResult': 1, 'outcomeRealNo': '02'}], 'outcomeCount': 2, 'marketRealNo': '04455'}]
2 3355482 Boston - Dallas 2024-03-02T01:30:00+01:00 1006954348 0 43066951 2 Kosárlabda 1296 NBA 199 USA [{'type': 'competition', 'id': 1296, 'name': 'NBA'}] 0 0 0 True 57 False 0 [{'participantName': 'Boston', 'participantId': 2068}, {'participantName': 'Dallas', 'participantId': 3673}] [{'cCGroupIds': [1], 'competitionId': 1299}, {'cCGroupIds': [1], 'competitionId': 42617}] None False 0 15 177 [{'marketId': 72773619, 'marketName': 'A mérkőzés győztese', 'marketType': 1, 'marketStatus': 1, 'channelWeb': 1, 'channelRetailer': 1, 'marketVersion': 1006954215, 'marketSubType': 2, 'minCombiCount': 1, 'minCombiCountLrt': 1, 'maxCombiCount': 2147483647, 'marketTypePriority': 2, 'marketTypeCCGroups': [1], 'mainMarket': 1, 'specialOddsValue': '', 'winnerOutcomeName': '', 'marketClosedCombinations': [], 'roundId': 0, 'outcomes': [{'outcomeNo': 1, 'outcomeName': 'Boston', 'fixedOdds': 1.22, 'outcomeResult': 1, 'outcomeRealNo': '01'}, {'outcomeNo': 2, 'outcomeName': 'Dallas', 'fixedOdds': 3.85, 'outcomeResult': 1, 'outcomeRealNo': '02'}], 'outcomeCount': 2, 'marketRealNo': '04572'}]