find_element_by_class_name类空格不起作用

时间:2018-05-09 12:08:48

标签: python selenium selenium-webdriver

我尝试使用find_element_by_class_name,其中类有空格但不起作用:

以下是代码:

<a class="yt-simple-endpoint style-scope yt-formatted-string" href="/user/santanderbrasil">Santander Brasil</a>

我希望得到内容&#34; Santander Brasil&#34;

我尝试了以下内容:

driver.find_element_by_class_name("yt-simple-endpoint.style-scope.yt-formatted-string")    
driver.find_element_by_class_name("a.yt-simple-endpoint.style-scope.yt-formatted-string")

driver.find_element_by_class_name("a.yt-simple-endpoint.")

没有工作......

任何帮助?

4 个答案:

答案 0 :(得分:3)

改为使用css选择器功能。

driver.find_element_by_css_selector("a.yt-simple-endpoint.style-scope.yt-formatted-string")

答案 1 :(得分:2)

这是三个独立的类,find_element_by_class_name()只接收一个类作为参数。例如

driver.find_element_by_class_name('yt-simple-endpoint')

您在类之间添加的.代表class中的css_selector。您可以使用它来使用css_selector

按所有三个类定位元素
driver.find_element_by_css_selector('.yt-simple-endpoint.style-scope.yt-formatted-string')

xpath

driver.find_element_by_xpath('//a[@class="yt-simple-endpoint style-scope yt-formatted-string"]')

答案 2 :(得分:0)

试试这个

driver.find_element_by_xpath("//div[contains(@class, 'yt-simple-endpoint') and contains(@class, 'style-scope') and contains(@class, 'yt-formatted-string')]"")

不确定find_element_by_xpath方法,因为我没有在python中使用selenium,但无论该函数是什么,选择器都应该这样做。

希望这有帮助。

答案 3 :(得分:0)

所有这些对我有用(Firefox驱动程序):

yt-simple-endpoint
style-scope
yt-formatted-string
yt-simple-endpoint.style-scope.yt-formatted-string

请注意,最后一个班级名称实际上与您问题中的第一个班级名称相同。它的工作原理是因为Selenium在内部将类名转换为CSS选择器,然后将其用于搜索。如果你想确定特定标签的内容,例如只匹配<a>标签与那些类,那么你需要查看CSS选择器和其他选项,如XPath。

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("file:///tmp/test.html")

for class_name in 'yt-simple-endpoint', 'yt-formatted-string', 'style-scope', 'yt-simple-endpoint.style-scope.yt-formatted-string':
    e = driver.find_element_by_class_name(class_name)
    print(e.text)
driver.close()

<强>输出

Santander Brasil
Santander Brasil
Santander Brasil
Santander Brasil

test.html文件包含:

<html>
<head><title>Test</title></head>
<body>
<a class="yt-simple-endpoint style-scope yt-formatted-string" href="/user/santanderbrasil">Santander Brasil</a>
</body>
</html>