单击 div 包含带有 selenium python 的特定文本
Posted
技术标签:
【中文标题】单击 div 包含带有 selenium python 的特定文本【英文标题】:click on div contains specific text with selenium python 【发布时间】:2022-01-02 08:03:37 【问题描述】:我刚开始学习 python 一周,希望我们 selenium 点击包含来自两个不同元素的特定文本的 div 容器。
<div data-v-38f540f9="" class="order"><h6 data-v-58641c02="" data-v-38f540f9="" class="heading no-wrap" style="--margin-top:0; --margin-bottom:0; --color:rgb(39, 39, 39);">Dagdienst company</h6> <p data-v-49b0fbe1="" data-v-38f540f9="" class="paragraph body no-wrap" style="--color:rgb(39, 39, 39); --margin:0;">Nov 23</p> <div data-v-6e6d111c="" data-v-38f540f9="" class="horizontal work-location-time" style="--margin-left:0; --margin-right:0; --margin-bottom:0; --v-align:baseline; --justify:flex-start; --flex-wrap:nowrap;"><!----> <!----> <span data-v-38f540f9="" aria-label="icon" class="icon medium time" data-v-6e6d111c="" style="--background-color:transparent; --border-radius:0;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 56 56">
<g fill="rgb(68, 179, 230)">
<path d="M29.71 19v9.65l8.415 4.89-1.395 2.335-9.855-5.86V19h2.835zM28 42.625c2.627 0 5.08-.671 7.356-2.014a14.18 14.18 0 0 0 5.255-5.255A14.234 14.234 0 0 0 42.625 28c0-2.627-.671-5.08-2.014-7.356a14.18 14.18 0 0 0-5.255-5.255A14.234 14.234 0 0 0 28 13.375c-2.627 0-5.08.671-7.356 2.014a14.18 14.18 0 0 0-5.255 5.255A14.234 14.234 0 0 0 13.375 28c0 2.627.671 5.08 2.014 7.356a14.18 14.18 0 0 0 5.255 5.255A14.234 14.234 0 0 0 28 42.625zM28 10c3.288 0 6.332.822 9.13 2.466a17.06 17.06 0 0 1 6.404 6.404C45.178 21.668 46 24.712 46 28c0 3.288-.822 6.332-2.466 9.13a17.06 17.06 0 0 1-6.404 6.404C34.332 45.178 31.288 46 28 46c-3.288 0-6.332-.822-9.13-2.466-2.711-1.587-4.846-3.736-6.404-6.447C10.822 34.288 10 31.26 10 28s.822-6.288 2.466-9.087a17.715 17.715 0 0 1 6.447-6.447C21.712 10.822 24.74 10 28 10z"></path>
</g>
</svg></span> <p data-v-49b0fbe1="" data-v-38f540f9="" class="paragraph body no-wrap ellipsis" data-v-6e6d111c="" style="--color:rgb(68, 179, 230); --margin:0;">09:30 | MediaCenter - Rooster</p> <p data-v-49b0fbe1="" data-v-38f540f9="" class="paragraph body no-wrap ellipsis" data-v-6e6d111c="" style="--color:rgb(68, 179, 230); --margin:0;"> | test.</p></div></div>
现在我只想单击此 div,前提是它包含 <h6>
中的文本“dienst”和 <p>
中的“Nov 23”
如果我只使用下面的代码查找文本“Nov 23”,我可以工作,但我如何添加额外的检查,并且只有在 div 内的文本还包含 <h6>
中的文本“dienst”时才单击?
today = ("Nov 23")
try:
order = WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.XPATH, "//p[contains(text(),'')]".format(today))))
print("workorder is found with text", '"' + (order.text) + '"')
order.click()
except TimeoutException:
print("no workorder is found with text", '"' + (order.text) + '"')
【问题讨论】:
尝试在找到p
的代码之后添加找到h6
的代码,然后进行点击动作,只有在两行都没有报错的情况下才会点击,或者得到元素并比较它是否与您想要的相同
【参考方案1】:
尝试在查找p的后面加上查找h6的代码,然后进行点击动作,只有两行都没有报错才会点击,或者获取元素并比较是否相同你想要的那个。
试试这个:
today = ("Nov 23")
try:
order = WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.XPATH, "//p[contains(text(),'')]".format(today))))
print("workorder is found with text", '"' + (order.text) + '"')
# I don't know if search by tag name in your case is the
# best scenario, but you need to adjust if don't
h6 = WebDriverWait(driver, 3).until(EC.presence_of_element_located(By.TAG_NAME, "h6")))
if h6.text == 'dienst':
order.click()
except TimeoutException:
print("no workorder is found with text", '"' + (order.text) + '"')
如果不做一些调整,我认为这可以帮助你
【讨论】:
谢谢你,我认为这只有在有一个 p 和一个 h6 元素时才有效,但它可以在同一页面中更多。您建议它搜索单个元素的代码对吗?它必须在同一个链中,换句话说,只有当它在一个具有特定文本的 div 中找到元素时,它才必须是匹配项。为了更容易理解这里只有基本文本和元素<div><h6>Dagdienst company</h6><p>Nov 23</p></div>
的更简洁的 html 代码,我可以想象它一定是这样的 //div/h6[contains(text(), 'dienst']/p[contains(text(), '')]".format(today)
是的,我不知道整个页面,所以我建议修复一些在页面上只查找一个 h6 的内容,但如果只能找到一个元素,您的想法可能会奏效带有 h6 的 div 命名为 dienst。
我自己上面的命令建议不起作用,和
是
的子元素,如果是
的子元素,我的命令应该可以工作。我必须找出如何找到包含两个子 和
包含文本 <div> <h6>Dagdienst company</h6> <p>Nov 23</p> </div>
的
div_order = driver.find_elements(By.CLASS_NAME, "order")
,这应该会给您具有“订单”类的 div 列表,然后您在 div 中搜索一个 h6 标记,可能在一个循环内:@987654326 @ 这会给你你想要的 h6 标签,而不是你对 p 标签重复这个过程。
以上是关于单击 div 包含带有 selenium python 的特定文本的主要内容,如果未能解决你的问题,请参考以下文章
单击特定的标签时,我希望显示下面的 div,其中包含其他链接