python - 抓取 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()`
解决方案
您可以使用以下 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 替换它。
推荐阅读
- php - 使用 php 显示 csv 文件时出现“警告:foreach 提供的无效”
- maven - Maven Central 上的聚合 Javadoc
- php - 安装时出现“Drupal-8 已安装”错误
- jquery - 将默认值设置为在页面加载时影响 html 表的过滤器
- mysql - 在 Docker 容器中初始化 MySQL 数据
- javascript - 如何解决 JavaScript 中 updateServing 函数不工作的问题?
- apache-spark - 在错误/中断时通过 unix shell 杀死在纱线集群模式下运行的火花流作业
- php - 在 laravel 中将请求转换为 Json
- python - 我无法导入aiohttp,但是好像已经安装了
- python - Pygame - 检测矩形的哪一侧与另一侧的哪一侧碰撞