【问题标题】:Using "contains (text)" to find parent and following sibling in selenium with Python?使用“包含(文本)”在使用 Python 的 selenium 中查找父级和跟随兄弟级?
【发布时间】:2021-07-05 19:45:50
【问题描述】:

所以我正在尝试构建一个工具来转移我出售的门票。销售进入我的 POS,我对订购的部分、行和座位号(显然还有其他信息)进行 API 调用。使用部分、行和座位号,我想将这些值插入到包含(文本)语句中,以便在主机站点上找到并选择正确的票。

以下是票的布局示例:

这里是与上述某一行相关的 DOM 的屏幕截图(如果给您带来不便,请见谅):

鉴于此,我应该如何构建我的 contains(text) 语句,以便它能够找到并选择正确的座位?我对自动化非常陌生/缺乏经验。几个月前我搞砸了它并取得了一些成功,并设法获得了一个工具,可以让我直接选择座位,但是在搜索与其他文本相关的文本时,“div”路径让我感到困惑。

我尝试了以下结构:


        for i in range(int(lowseat), int(highseat)):
            web.find_element_by_xpath('//*[contains (text(), "'+section+'")]/following-sibling::[contains text(), "'+row+'")]/following-sibling::[contains text(), "'+str(i)+'")]').click()

无济于事。有人可以帮我解释一下如何正确构建这些语句,以便正确搜索部分、行和座位号吗?

谢谢!

此外,如果需要,这里是一个包含更多按钮上下文的屏幕截图(如果需要)。按钮以天蓝色突出显示:

【问题讨论】:

    标签: python selenium automation


    【解决方案1】:

    你不能使用 text() 因为它在嵌套元素中。您可能希望将所有这些映射到 dicts 并使用过滤器进行选择。

    更新

    这是一种懒惰的方法(未经测试):

    button = driver.execute_script('''
      return [...document.querySelectorAll('button')].find(b => {
        return b.innerText.match(/Section 107\b.*Row P.*Seat 10\b/)
      })
    ''')
    

    【讨论】:

    • 您介意多解释一下或将我指向资源吗?不确定在这种情况下“将所有这些映射到字典”是什么意思。这里非常新手级别。
    猜你喜欢
    • 2021-07-18
    • 2021-04-21
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 2022-07-10
    • 1970-01-01
    相关资源
    最近更新 更多