【问题标题】:Can't find element selenium even though it certainly exists找不到元素硒,即使它确实存在
【发布时间】:2021-09-10 15:23:06
【问题描述】:

我在这里找不到元素Link

我想使用以下方法抓取匹配项的名称:

WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH, '/html/body/div[7]/div[1]/div/div/div[4]/div/div/main/div[2]/div/div/div/div//div/div/div/article/main/a/span')))

(我不喜欢使用 XPath,否则我也会得到不只是全职结果的赌注)

但是当我运行它时它返回一个空列表。 我已经尝试弄清楚匹配名称是否在 iframe 或其他内容中,但我无法弄清楚。有人知道我如何抓取这些元素吗?

注意我已经多次检查 XPath 是否真的在 HTML 中,并且确实是。

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    所以您使用的代码是等待页面加载,直到找到 xpath。我写了下面的代码,它可以工作。它也只打印日期,您需要调整。但是我只是运行它,所以我相信它可以工作。确保在顶部加载所有依赖项。它适用于类而不是 xpath。

    driver.get("https://sports.williamhill.com/betting/en-gb/football/competitions/OB_TY295/English-Premier-League/matches/OB_MGMB/Match-Betting")
    WebDriverWait(driver, 10).until(
        lambda x: x.find_element_by_class_name('sp-o-market__title').is_displayed())
    out = driver.find_elements_by_class_name('sp-o-market__title')
    for item in out:
        item = item.get_attribute('innerHTML')
        item = item.split('<span>')[1]
        item = item.split("</span>")[0]
        print(item)
    

    生产:

    Arsenal v Norwich
    Brentford v Brighton
    

    【讨论】:

    • 您的解决方案确实很好,我很容易摆脱了日期。您能否详细说明 for 循环中的部分?我想对赔率做同样的事情,但我不太明白你的解决方案是如何工作的。所以我无法相应地复制/调整它。
    • 当然,所以你注意到 find_elements_by_class_name 注意到元素中的 s。所以你可以遍历它们。然后你需要里面的html。在您只需要 &lt;span&gt; 中的文本之后,瞧。请在循环内的每一行之后添加print(item),这将有助于您了解正在执行的项目。
    • split 是一种可以将字符串拆分为数组片段的方法(将分隔点作为输入或不输入)。对这些方法也有一些阅读 get_attribute 并很高兴再次为您提供帮助!编码愉快。
    猜你喜欢
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多