Python 3.x 如何在Python Selenium中不使用Javascript从DIV获取ID?
我试图将具有相同类名的ID存储在数组中。当我尝试使用纯python/selenium时,它失败了,并且只有在使用javascript代码时才起作用 这是我当前的代码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;
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)