首页 > 解决方案 > 抓取 flex-element Selenium Python

问题描述

我正在尝试从 2019 年 1 月 1 日开始收集一些网球统计数据。为此,我尝试使用 selenium 抓取以下网页:https ://www.sofacore.com/de/tennis/2019-01-01

当我手动单击第一个匹配项时,右侧的容器会更改并显示统计信息。这就是我想要自动访问的内容。

当我尝试单击带有 selenium 的元素时,它会将我重定向到另一个页面。谁能告诉我为什么它不只是显示与手动单击相同的内容以及如何解决此问题?

这是我的代码:

from selenium import webdriver  
from selenium.webdriver.common.action_chains import ActionChains  
from selenium.webdriver.chrome.options import Options  
from selenium.webdriver.common.by import By  
from selenium.webdriver.support.ui import WebDriverWait as wait  
from selenium.webdriver.support import expected_conditions as EC  
import time

options = Options()
options.binary_location = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"

browser = webdriver.Chrome(chrome_options = options)
url = 'https://www.sofascore.com/de/tennis/2019-01-01'
browser.get(url)
browser.maximize_window()

xpath = '/html/body/div[1]/main/div/div[2]/div/div[3]/div[2]/div/div/div/div/div[2]/a/div'
browser.find_element_by_xpath(xpath).click()
time.sleep(2)
browser.close()`

标签: pythonseleniumflexbox

解决方案


您可以使用以下 xpath :

//div[contains(@class, 'Col-pm5mcz-')]//descendant::div[contains(@class, 'styles__StyledWidget-')]

并得到innerHTML那个使用get_attribute方法

代码 :

url = "https://www.sofascore.com/de/tennis/2019-01-01"
driver.get(url)
xpath = '/html/body/div[1]/main/div/div[2]/div/div[3]/div[2]/div/div/div/div/div[2]/a/div'
driver.find_element_by_xpath(xpath).click()
sleep(2)
details = driver.find_element_by_xpath("//div[contains(@class, 'Col-pm5mcz-')]//descendant::div[contains(@class, 'styles__StyledWidget-')]").get_attribute('innerHTML')
print(details)

您使用的 xpath 是绝对 xpath/html/body/div[1]/main/div/div[2]/div/div[3]/div[2]/div/div/div/div/div[2]/a/div

尝试用相对 xpath 替换它。


推荐阅读