当前位置: 首页 > 知识库问答 >
问题:

如何使用Selenium和Python在innerText包含前导和尾随空格字符时定位并单击元素

韩景辉
2023-03-14

我想找到(并点击)“Reoni”元素,但我不知道该用什么函数

我试图与

driver.find_element_by_class_name("oe_menu_leaf")  

driver.find_element_by_class_name("oe_menu_text")

但是硒引发了一个无法定位的错误元素,我试过了

driver.find_element_by_link_text("Reoni")

这是我要查找的元素:

<a href="/web#menu_id=86&amp;action=99" class="oe_menu_leaf" data-menu="86" data-action-model="ir.actions.act_window" data-action-id="99">
    <span class="oe_menu_text">
    Reoni
    </span>
</a>

和完整的html:

如果我不够清楚,或者您需要我的代码,请告诉我。

共有2个答案

乐健
2023-03-14

试着这样做:

来自Chrome:

右键单击要查找xpath的项目上的“inspect”。

右键单击控制台上突出显示的区域。

转到复制xpath

selectElem=browser.find_element_by_xpath('x-path-here').click()
from bs4 import BeautifulSoup

innerHTML = browser.execute_script("return document.body.innerHTML")
soup = BeautifulSoup(str(innerHTML.encode('utf-8').strip()), 'lxml')
value = soup.find('span', attrs={'class':'fxst-calendarpro fxst-table-s1'}).text
饶德元
2023-03-14

由于所需元素是动态元素,您需要引导WebDriverWait使所需元素可单击,并且您可以使用以下任一解决方案:

>

WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.oe_menu_leaf[href*='/web#menu_id=']>span.oe_menu_text"))).click()

使用XPATHtext()

WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='oe_menu_leaf' and starts-with(@href,'/web#menu_id=')]/span[@class='oe_menu_text' and text()='Reoni']"))).click()

使用XPATHnormalize-space()

WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='oe_menu_leaf' and contains(@href,'/web#menu_id=')]/span[@class='oe_menu_text' and normalize-space()='Reoni']"))).click()

注意:您必须添加以下导入:

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

有关详细讨论,请参见:

  • 当使用Chrome时,Selenium“Selenium.common.exceptions.NoSuchElementException”
 类似资料:
  • 我正在尝试使用Selenium和python单击以下按钮: 这只是一个简单的按钮,如下所示: 代码: 这将导致以下异常: 所以,我尝试使用。 (使用访问第二个元素,因为第一个元素将导致

  • 问题内容: 我很难尝试将.strip与以下代码行结合使用。 谢谢您的帮助。 问题答案: 您可以使用strip()删除尾随和前导空格。 注意:内部空间被保留

  • 问题内容: 是否有一种方便的方法来从Java字符串中剥离任何前导或尾随空格? 就像是: 结果: 将替换keep和this之间的空间。 问题答案: 你可以尝试trim()方法。

  • 问题内容: 在Java中寻找快速,简单的方法来更改此字符串 看起来像这样 在这里,我用一个空格替换了所有多个空格,但我也希望字符串开头的一个或多个空格消失。 这样的事情使我部分地在那里 但不完全是 问题答案: 尝试这个: 也可以看看 - - 返回字符串的副本,省略前导和尾随空格。 - 重复 没有trim()正则表达式 也可以只用一个执行此操作,但这比解决方案的可读性差得多。尽管如此,这里提供它只是

  • 问题内容: 我有一个包含两个字段(国家和ISO代码)的表: 在某些行中,第二个字段在开头和/或结尾处都有空格,这会影响查询。 有没有一种方法(在SQL中)遍历表并查找/替换field2中的空格? 问题答案: 您正在寻找TRIM。

  • 问题内容: 该函数会删除尾部和前导空格,但是,如果我只想删除字符串的尾部空格,该怎么办? 问题答案: 如果您使用的是JDK 11或更高版本,则可能应该使用stripTrailing()。 早期的JDK版本 使用正则表达式,您可以将所有尾随空格字符(包括空格和制表符)替换为空字符串()。 输出量 在线演示。 这是正则表达式的细分: –任何空白字符, –匹配一个或多个先前的令牌(可能);即,匹配一个或