我正在尝试根据后代的可变内容查找元素。我在这里查看了关于stackoverflow的几篇文章,但是不幸的是,无法弄清楚如何使它们适应我的情况。实际上,我试图找到以下列表元素<li>
,其中包含字符串变量facility
(无论在何处)和带有字符串变量lesson_time
的后代div:>
<div class="day">
<li class="btn-hover-parent"> ... </li>
<li class="btn-hover-parent"> ... </li>
<li class="btn-hover-parent"> ... </li>
<li class="btn-hover-parent"> ... </li>
<li class="btn-hover-parent">
<a class="xy" href="...">
<div class="abc">
<div class="text-h4">This is the text</div>
...
</div>
...
</a>
</li>
</div>
由于每个<li>
可以包含一个变量,因此我需要使用AND运算符查找与两个变量匹配的元素。我设法这样搜索<li>
:
day_ele = driver.find_element_by_xpath("//div[@class='day'][contains(., '" + args.day + "')]")
day_ele.find_element_by_xpath(".//li[@class='btn-hover-parent'][contains(., '" + args.facility + "')][contains(., '" + args.lesson_time + "')]").click()
但是,这会在<li>
的任何位置搜索变量,这对我来说是个问题。对于lesson_time
,我明确希望在<div class="text-h4">
中进行搜索。我尝试过这样的事情:
day_ele.find_element_by_xpath("//li[@class='btn-hover-parent'][contains(., '" + args.facility + "')] and ./div[@class='text-h4'][contains(., '" + args.lesson_time + "')]").click()
但是,这告诉我XPath表达式无效。每个搜索字词本身都有效。我认为./div
做错了。我也尝试过.//div
和div
,但都没有用。
如果这很重要,请使用Python 3 Selenium进行。
答案 0 :(得分:0)
U可以像这样使用BeautifulSoup
:
from bs4 import BeautifulSoup
html = """
<div class="day">
<li class="btn-hover-parent"> ... </li>
<li class="btn-hover-parent"> ... </li>
<li class="btn-hover-parent"> ... </li>
<li class="btn-hover-parent"> ... </li>
<li class="btn-hover-parent">
<a class="xy" href="...">
<div class="abc">
<div class="text-h4">This is the text</div>
...
</div>
...
</a>
</li>
</div>
"""
soup = BeautifulSoup(html,'html.parser')
li_items = soup.find_all('li',class_ = "btn-hover-parent")
for li in li_items:
try:
print(li.a.div.div.text)
except:
pass
输出:
This is the text
这有效。但是,如果u在具有其他值的多个div标签之间具有div标签,则将for loop
更改为此:
for li in li_items:
try:
a = li.find('a',class_ = "xy")
div1 = a.find('div',class_ = "abc")
div2 = div1.find('div',class_ = "text-h4")
print(div2.text)
except:
pass
输出:
This is the text
希望这会有所帮助!