Selenium Python -通过包含空格的类名查找元素

m2xkgtsf  于 2022-12-13  发布在  Python
关注(0)|答案(4)|浏览(157)

我正在编写一个Python程序,它使用Selenium来导航到高级搜索页面上的搜索框,并在其中输入信息。这个网站使用Javascript,每次加载网站时,每个搜索框的ID和Name都会略有变化,但类名保持一致。尽管类名经常被重用,所以我的目标是使用find_elements_by_class_name(classname),然后在该列表中建立索引。
例如,一个box的类名为x-form-text x-form-field x-form-num-field x-form-empty-field,但我不能使用它,因为selenium认为它是一个复合类名,并抛出一个错误。如果我只使用它的一部分,如x-form-text,它就找不到元素。我希望找到一种允许空格的方法,或者,如果不能做到这一点,找到一种方法来搜索类名包含一段不带空格的文本的所有元素,例如x-form-text
任何帮助或想法将不胜感激!
编辑:
我试了这个代码:quantminclass = 'x-form-text.x-form-field.x-form-num-field.x-form-empty-field' quantmin = '25' browser.find_elements_by_css_selector(quantminclass)[0].send_keys(quantmin)
但是得到了一个错误,列表索引超出了范围,这意味着它找不到任何东西。我检查了元素,这肯定是它的类名,所以我不知道如何继续。

0s0u357o

0s0u357o1#

这些是多个类,而不是一个带有空格的类,只是将所有类一起使用。

driver.find_element_by_css_selector('.class1.class2.class3')

在CSS选择器中,一个点.是一个类,可以连接任意数量的类名

igetnqfo

igetnqfo2#

请尝试将类名转换为CSS选择器。
使用CSS选择器,名为x-form-text x-form-field x-form-num-field的类将变为.x-form-text.x-form-field.x-form-num-field
所以基本上只要用点代替空格就可以了。

6tdlim6h

6tdlim6h3#

如果类名(或其他属性)中包含空格,例如:

<div class="target with space or maybe another-long-text">Test 123</div>

这将起作用:

driver.find_element_by_xpath("//div[@class='target with space or maybe another-long-text']")
lc8prwob

lc8prwob4#

由于Selenium 4 find_element_by_*已过时,因此需要使用find_element()[Selenium-doc]

from selenium.webdriver.common.by import By

# By CLASS_NAME
driver.find_element(By.CLASS_NAME, "x-form-text.x-form-field.x-form-num-field.x-form-empty-field")

# By CSS_SELECTOR
driver.find_element(By.CSS_SELECTOR, ".x-form-text.x-form-field.x-form-num-field.x-form-empty-field")

# By XPATH
driver.find_element(By.XPATH, "//*[@class='x-form-text x-form-field x-form-num-field x-form-empty-field']")

相关问题