单击页面上的选项卡以降低硒以抓取

clicking a tab on a page to alow selenium to scrape

提问人:Paul Corcoran 提问时间:11/24/2022 最后编辑:ProphetPaul Corcoran 更新时间:11/24/2022 访问量:81

问:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
from datetime import datetime
import pandas as pd
import warnings
import os

warnings.filterwarnings('ignore')


url = 'https://www.fifa.com/fifaplus/en/match-centre/match/17/255711/285063/400128082?country=IE&wtw-filter=ALL'

option = Options()
option.headless = True
driver = webdriver.Chrome("C:/Users/paulc/Documents/Medium Football/chromedriver.exe",options=option)

# Scraping the data

HomeTeam = driver.find_element(By.XPATH, "/html/body/div[1]/main/div/div[1]/div/section/div[1]/div[1]/div[2]/div[3]/div/div[1]/div/div/div[1]/div[1]/p").text
AwayTeam = driver.find_element(By.XPATH, "/html/body/div[1]/main/div/div[1]/div/section/div[1]/div[1]/div[2]/div[3]/div/div[1]/div/div/div[3]/div[2]").text
Result = driver.find_element(By.XPATH, "/html/body/div[1]/main/div/div[1]/div/section/div[1]/div[1]/div[2]/div[3]/div/div[1]/div/div/div[2]").text

elem = WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, “/html/body/div 1/main/div/div[3]/div/div1/div/div[4]”))) elem.click()

enter image description here

嗨,大家好,我想抓取世界杯数据,我已经设法通过获取球队名称和比分轻松开始。游戏中的统计数据位于图像的统计选项卡中。因此,要开始抓取它们,我需要能够使用 selenium 单击它并使页面处于活动状态。

我是否遗漏了一些明显的东西,而这不能通过 xpath 完成?

帮助是值得赞赏的。

python selenium-webdriver web-scraping xpath

评论

0赞 AomineDaici 11/24/2022
你能试试这个XPath吗WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, "//div[contains(text(),'STATS')]"))).click()

答:

1赞 Prophet 11/24/2022 #1

如果您想单击“LINE UP”选项卡,可以使用以下 XPath 完成: .要单击“STATS”选项卡,您可以使用此 XPath: .因此,Selenium代码行可以如下所示:"//div[text()='LINE UP']""//div[text()='STATS']"

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[text()='LINE UP']"))).click()

对于选项卡和LINE UP

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[text()='STATS']"))).click()

此外,您还需要改进定位器。
非常长的绝对 XPath 非常容易损坏。
"STATS"

评论

0赞 Paul Corcoran 11/24/2022
谢谢。现在开始抓取统计页面:)
0赞 Paul Corcoran 11/24/2022
我遇到了一些明显的后续麻烦
0赞 Paul Corcoran 11/24/2022
element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, “//div[text()='STATS']”))) actions = ActionChains(driver) actions.move_to_element(element).click().perform()
0赞 Paul Corcoran 11/24/2022
似乎代码没有将我导航到选项卡,因为 driver.find_element(By.XPATH, “/html/body/div[1]/main/div/div[3]/div/div[2]/div/div/div[46]/div[1]/div[2]”).text 返回“FIFA World Cup”,它仅出现在概述页面上
1赞 Paul Corcoran 11/24/2022
啊,我有饼干要处理