【问题标题】:Locating an element with no identifier in HTML using Selenium (Not using Xpath)使用 Selenium 在 HTML 中定位没有标识符的元素(不使用 Xpath)
【发布时间】:2021-12-08 01:44:55
【问题描述】:
def page_nav(individual):
    indiv_home = driver.find_element(By.XPATH, "/html/body/div/div[2] /div[2]/div[8]/a").click()
    time.sleep(5)
    person_select = driver.find_elemnet(By.TAG_NAME, individual).click()

<strong>Dylan Call</strong> <-- I want to find the element based off "Dylan Call"

上面的代码写得不是最好的,我知道(我很新,我提前道歉)

我正在寻找一种方法来查找上图中的元素(“个人名称”),因为它没有像“名称”或“id”这样的唯一标识符。

我正在尝试创建一个机器人来查看文件夹,识别与文件关联的个人的姓名,并使用 selenium/python 将文件上传到相应人员的个人资料。现在,我已将个人名称存储在一个变量中,但我想通过“find_elements”函数传递该变量。可悲的是,我不能只使用“By.Xpath”来定位元素,因为我正试图在个人姓名上专门找到它。

有没有人有任何解决方法或更好的方法来做到这一点?

【问题讨论】:

  • edit您的问题并发布minimal reproducible example,清楚地说明您为什么不能使用XPath。
  • 您能否展示您现在拥有的代码以帮助我们了解您遇到的问题?目前尚不清楚您要查找的元素。是链接、“强”标签等...?
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python selenium


【解决方案1】:

您可以使用 xpath 检索包含个人名称的 strong 标记,如下所示

individual = "Dylan Call"
driver.find_elements_by_xpath(f'//strong[@contains(text(), "{individual}")]')
  • 这里// 表示我们正在使用相对xpath,这意味着我们正在html 标记中的任何位置寻找强标记。
  • 我们指定我们正在寻找的强标签有一个包含变量individual给出的字符串的innerText。

我可以建议一个改进,你不应该使用 time.sleep,而是WebdriverWait in conjunction with ExpectedCondition。不是添加任意延迟来等待页面加载,而是允许等待我们尝试查找的元素显示出来。

所有的代码都变成了

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions import presence_of_element_located

individual = "Dylan Call"

# create a wait object that will be used to wait at most 10 seconds that element appears.
wait = WebDriverWait(driver, 10)

# wait until the strong tag containing individual name appears.
# timeout if it did not appeared after 10 seconds.
person_select = wait.until(
    presence_of_element_located((By.XPATH, f'//strong[@contains(text(), "{individual}"]'))
)

person_select.click()

【讨论】:

  • 感谢您的帮助!我避免使用等待调用,因为它在我的代码的其他领域给我带来了很多麻烦。并且我想确认在此特定实例中不存在等待调用,然后继续大声笑
猜你喜欢
  • 1970-01-01
  • 2021-04-11
  • 2021-10-21
  • 2021-07-31
  • 2016-06-04
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多