Python 3.x 如何在Python Selenium中不使用Javascript从DIV获取ID?

Python 3.x 如何在Python Selenium中不使用Javascript从DIV获取ID?,python-3.x,selenium-webdriver,selenium-chromedriver,Python 3.x,Selenium Webdriver,Selenium Chromedriver,我试图将具有相同类名的ID存储在数组中。当我尝试使用纯python/selenium时,它失败了,并且只有在使用javascript代码时才起作用 这是我当前的代码 html_content = """ <html> <body> <style> .col-x-z.ab.def { border: 4px outset orange; background-color: lightblue; text-align: center;

我试图将具有相同类名的ID存储在数组中。当我尝试使用纯python/selenium时,它失败了,并且只有在使用javascript代码时才起作用

这是我当前的代码

html_content = """
<html>
<body>
<style>
.col-x-z.ab.def {
border: 4px outset orange;
background-color: lightblue;
text-align: center;
height:200px; width:400px; 
}
.portlet.box.blue {
border: 2px outset blue;
background-color: lightblue;
text-align: center;
}
</style>
<div class="col-x-z ab def" id="sortable_portlets">
        <div class="col-x-z ab def" id="col_1" col="1">
            <div id="353" class=" portlet box blue">x</div>
            <div id="355" class=" portlet box blue">x</div>
            <div class=" wqp"></div>            
        </div>  
    <div class="col-x-z ab def" id="col_2" col="2">
            <div id="473" class=" portlet box blue">y</div>
            <div id="475" class=" portlet box blue">y</div>
            <div class=" wqp"></div>
        </div>
</div>
</body>
<html>
"""

from selenium import webdriver

driver_path="/my/path/chromedriver.exe"
driver = webdriver.Chrome(driver_path)

driver.get("data:text/html;charset=utf-8,{html_content}".format(html_content=html_content))

ids_arr = driver.execute_script('var coll = document.getElementsByClassName(" portlet box blue"), ids = [], i = 0; while( coll[ i ] ) { ids.push( coll[ i++ ].id ) };return ids;')

>>> ids_arr
['353', '355', '473', '475']

什么是错误的,以及如何让它在没有javascript的情况下工作?谢谢。

问题是您的代码

document.getElementsByClassName(" portlet box blue")
它正在按类名搜索元素,但您为该方法提供了3个类名:“portlet”、“box”和“blue”。这就是您收到消息的原因,
无效选择器
。你必须只选择一个方法才能成功。。。或者您可以使用CSS选择器,
.portlet.box.blue
,来获取这三个选项。注意:CSS选择器中的
表示类名

我不知道你为什么要用JS。。。你不需要

elements = driver.find_elements_by_css_selector(".portlet.box.blue")
for element in elements:
    print(element.get_attribute("id"))
或者,如果需要数组中的元素ID,可以这样做

elements = driver.find_elements_by_css_selector(".portlet.box.blue")
ids = []
for element in elements:
    ids.append(element.get_attribute("id"))
print(ids)

杰出的非常感谢。它工作得很好。我尝试过JS,因为我无法让它工作。使用纯Python/Selenium可以实现更好、最清晰和最简单的功能。
elements = driver.find_elements_by_css_selector(".portlet.box.blue")
ids = []
for element in elements:
    ids.append(element.get_attribute("id"))
print(ids)