Selenium / Python - 带有空格的类名无法本地元素

Posted

技术标签:

【中文标题】Selenium / Python - 带有空格的类名无法本地元素【英文标题】:Selenium/Python - Class name with spaces unable to local element 【发布时间】:2019-04-10 12:31:53 【问题描述】:

我无法找到某个元素。我正在尝试找到它并在该字段中输入一些数据。我注意到类名有空格并且 ID 是自动生成的(将这些与其他表单进行比较),所以不能使用 ID 进行自动化,因为我想自动创建新表单,并且每次都会使用“描述”字段时间。

下面是描述字段的 html,我试图找到它。

<input size="15" maxlength="255" class="acitem description s-description ui-autocomplete-input" spinner="/assets/spinner-48c6e73f2bbe9ea753f7f8e5410541a8138d19d657ddd532b2765335ed3d62bf.gif" auto_complete="true" data-autocomplete-url="/items/auto_complete" data-autocomplete-renderer="item_autocomplete_renderer" data-autocomplete-delay="250" type="text" name="invoice[invoice_lines_attributes][68345][description]" id="invoice_invoice_lines_attributes_68345_description" autocomplete="off">

我目前使用的代码失败了。

test_1 = driver.find_element_by_css_selector('.acitem.description.s-description.ui-autocomplete-input')
test_1.send_keys("HELLO WORLD")

test_2 = driver.find_element_by_css_selector("input[class='acitem description s-description ui-autocomplete-input']")
test_2.send_keys("HELLO WORLD")

test_3 = Select(driver.find_element_by_xpath("//*[@class='acitem description s-description ui-autocomplete-input']"))
test_3.send_keys("HELLO WORLD")

是我弄错了代码,还是对包含空格的类名有一些解决方法?谢谢。

【问题讨论】:

您的代码使用上面的 html 工作,select 元素除外 【参考方案1】:

试试 xpath

//input[starts-with(@id,'invoice_invoice_lines_attributes_')]

【讨论】:

【参考方案2】:

我几乎在所有情况下,都可以通过 XPATH 访问来自 DOM 的所有元素。 在你的情况下,我会选择以下内容:

element = driver.find_element_by_xpath("//input[@id='acitem description s-description ui-autocomplete-input']")

【讨论】:

【参考方案3】:

感谢您的所有帮助。我通过使用 start-with 和 contains 解决了。 下面是我的代码。

invc_desc =driver.find_element_by_xpath("//input[starts-with(@class,'acitem') and contains(@class,'s-description')]")
invc_desc.clear()
invc_desc.send_keys("HELLO WORLD")

【讨论】:

以上是关于Selenium / Python - 带有空格的类名无法本地元素的主要内容,如果未能解决你的问题,请参考以下文章

selenium+python unittest实践过程之问题杂集

Python+Selenium 元素获取及使用心得

带有 Selenium 的 Python:从文件系统拖放到 webdriver?

如何使用 Selenium 和 Python 绕过带有 buster 扩展的 ReCaptcha

在带有 selenium 的 python 中,如何轮换 IP 地址?

单击 div 包含带有 selenium python 的特定文本