【问题标题】:How to get text in span with xpath. selenium python如何使用 xpath 获取 span 中的文本。硒蟒
【发布时间】:2019-03-23 13:49:03
【问题描述】:

在询问之前,我通过谷歌找到了 2 小时的答案。但我没有答案。

我在 python 中使用 selenium

我在下面的 q/a 答案中应用了我的代码,但没有打印任何文本。

XPath query to get nth instance of an element

我想得到的是“无法选择”

<li data-index="5" date="20190328" class="day dimmed">
    <a href="#" onclick="return false;">
        <span class="dayweek">Tuesday</span>
        <span class="day">28</span>
        <span class="sreader">Can't select</span>
    </a>
</li>

我使用 xpath 是因为我需要重复

我应该这样做。 上面的 HTML 代码是一个简单的改动

day_lists = driver.find_elements_by_xpath('//li')

没有打印,也没有错误

for day_list in day_lists:
    print(day_list.find_element_by_xpath('//span[@class="sreader"]').text)

++++ 2019/3/24/16:45(+09:00)

当我使用以下代码进行测试时

print(day_list.find_element_by_xpath('.//span[@class="sreader"]/text()'))

出现错误。为什么没有这样的元素?

selenium.common.exceptions.NoSuchElementException: 
Message: no such element: Unable to locate element: 
{"method":"xpath","selector":".//span[@class="sreader"]/text()"}

【问题讨论】:

    标签: python-3.x selenium xpath webdriver xpath-1.0


    【解决方案1】:

    如果没有打印任何内容并且没有错误,则可能隐藏或尚未生成所需的文本。

    对于第一种情况,您可能需要使用get_attribute('textContent'):

    day_lists = driver.find_elements_by_tag_name('li')
    for day_list in day_lists:
        print(day_list.find_element_by_xpath('.//span[@class="sreader"]').get_attribute('textContent'))
    

    第二种情况:

    from selenium.webdriver.support.ui import WebDriverWait as wait
    
    day_lists = driver.find_elements_by_tag_name('li')
    for day_list in day_lists:
        print(wait(driver, 10).until(lambda driver: day_list.find_element_by_xpath('.//span[@class="sreader"]').text)
    

    请注意,在这两种情况下,您都需要在 XPath 中添加前导点:

    '//span' --> './/span'
    

    【讨论】:

    • 如果列表没有加载,我会测试&lt;a href 代码,但运行良好。而你所说的case1,case2也没有结果,
    • hmm... 对我来说,那些 span 节点确实显示为空:&lt;span class="sreader"&gt;&lt;/span&gt;。我看不到文字。看来您需要选择(单击)日期才能生成"선택불가" 文本...
    • 点击后我总是检查...谢谢
    • 终于成功了!谢谢!!
    【解决方案2】:

    打印所需的文本,例如선택불가&lt;span&gt;标签你可以编写如下函数:

    def print_text(my_date):
            print(driver.find_element_by_xpath("//li[@class='day dimmed'][@date='" +my_date+ "']//span[@class='sreader']").get_attribute("innerHTML"))
    

    现在您可以调用任何日期的函数,如下所示:

    print_text("20190328")
    

    【讨论】:

    • 我想使用 day_listday_list.find_element_by_xpath('//span[@class="sreader"]').get_attribute('innerHTML') 结果相同
    • day_list.find_element_by_xpath('///li[@date="'+day_list.get_attribute('date')+'"]//span[@class="sreader"]').get_attribute('innerHTML') 这也是同样的结果。什么也没打印
    【解决方案3】:

    这里是解决方案。如果这不起作用,那么我预测该元素可能会出现在单独的窗口或框架中。

    CSS: li[class='天变暗'][date='20190328'] .sreader

    xpath:

    检查下面是否有多个窗口使用

    print(len(driver.window_handles))
    

    检查下面是否有多个框架使用

    print(len(driver.find_elements_by_css_selector('iframe')))
    

    【讨论】:

    • day_list.find_element_by_xpath('.//a').send_keys(Keys.ENTER) 行动,但为什么print(day_list.find_element_by_xpath('//span[@class="sreader"]').text) 什么都不打印?我也查了UTF8,没问题
    • 我不能使用driver. 为什么我使用day_list 是我使用这个stie "cgv.co.kr/ticket"。我的问题与所有代码无关。因为我更改了一些代码。所以无论如何我应该使用day_list.
    • .get_attribute('innerText') 结果相同,没有打印
    【解决方案4】:

    尝试以下选项:

    day_lists=WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, '//li[@class="day dimmed"]')))
    for day_list in day_lists:
        print(day_list.find_element_by_xpath('//span[@class="sreader"]').text)
    

    day_lists=WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, '//li[@class="day dimmed"]')))
    for day_list in day_lists:
       print(driver.execute_script("return arguments[0].innerHTML;", day_list.find_element_by_xpath('//span[@class="sreader"]')))
    

    请注意,您还需要以下导入。

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

    【讨论】:

    • 两者都不打印。我在正文中附加了一些代码。你能检查一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2021-02-18
    相关资源
    最近更新 更多