【问题标题】:Selenium only finding certain elements in PythonSelenium 仅在 Python 中查找某些元素
【发布时间】:2021-10-07 08:02:48
【问题描述】:

我在 Python 中使用 Selenium 查找元素时遇到了一些问题,它适用于我测试过的所有其他网站上的每个元素,但在游戏网站上它只能找到某些元素。

这是我正在使用的代码:

from selenium import webdriver
import time

driver = webdriver.Chrome("./chromedriver")
driver.get("https://www.jklm.fun")

passSelf = input("Press enter when in game...")
time.sleep(1)
syllable = driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[2]/div[2]/div").text
print(syllable)

运行代码时,找不到元素 /html/body/div[2]/div[2]/div[2]/div[2]/div。在图像中,您可以看到它正在尝试查找的元素:

Element the code is trying to find

但是运行相同的代码,但用主游戏之外的东西(例如右上角的房间代码)替换 XPath,它成功找到了元素:

Output of the code being run on a different element

我尝试使用类名、名称、选择器和 XPath 来查找原始元素,但没有占上风,我认为影响它的唯一因素是:

  1. 元素会周期性变化(不确定这是否会影响它)
  2. 元素位于“画布区域”中,并且以某种方式挡住了它。

我不确定这些事情是否重要,因为我是使用 selenium 的新手,感谢任何帮助。游戏所在的网站是https://www.jklm.fun/,如果你想看看元素的话

【问题讨论】:

    标签: python selenium selenium-chromedriver


    【解决方案1】:

    您尝试访问的元素位于 iframe 中。像这样先切换到框架

    driver.switch_to_frame(driver.find_element_by_xpath("//div[@class='game']/iframe[contains(@src,'jklm.fun')]"))
    

    【讨论】:

    • 非常感谢!在尝试自己寻找答案时,我确实偶然发现了 iframe,但有点不知所措
    • 我知道这是一个非常老的问题,我不确定发布这么老的问题是否违反任何规则,但我很感兴趣你是如何找到 iframe 的?我试过做一些研究,但我不明白你是如何在“通过 xpath 查找元素”中获得该字符串的。
    【解决方案2】:
    driver.get("https://jklm.fun/JXUS")
    WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.XPATH, "//button[@class='styled']"))).click()
    time.sleep(10)
    driver.switch_to.frame(0)
    while True:
        Get_Text = driver.find_element_by_xpath("//div[@class='round']").text
        print(Get_Text)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2018-08-29
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 2023-04-10
      • 2021-11-17
      相关资源
      最近更新 更多