如何定位百度首页输入框的下拉列表元素,并选择?
firefox_driver.execute_script('document.getElementsByClassName("bdsug-new")[0].style.display="block";') #
input1 = firefox_driver.find_element_by_css_selector("input#kw").click()
time.sleep(2)
ul = firefox_driver.find_element_by_css_selector("ul")
报错:Message: TypeError: document.getElementsByClassName(...)[0] is undefined
分析定位:
document.getElementsByClassName("bdsug bdsug-new")返回的值是None。
问题一:为什么返回的是None呢?
是否是条件不对?class=bdsug bdsug-new bdsugbg,三个值都试了下,并且换成其他元素的值,也是定位不到。
其他原因?执行js代码的时候,DOM元素还未加载。存疑,待验证。
div1 = firefox_driver.execute_script('window.onload=function(){a=document.getElementsByClassName("bdsug-new");return a;}')
拿到的div1值依然是None。
为什么返回的是None呢?这种隐藏元素如何定位?
你的需求是什么 ,没必要根据class的"bdsug-new"定位啊?
定位这个输入框下拉列表的内容。这个div是不可见的,不能直接定位这个div下的后代元素。也试过先定位input,然后点击,再定位div的后代元素,发现也是不行。只能先通过js使其可见,但是现在发现js找不到这个div。我截图的html可能不太详细,你可以看下百度首页
def exhibition_element(self, selector: str) -> None:
"""将元素显示到可见窗口中 """
ele = self.find_element(selector)
js = "arguments[0].scrollIntoView();"
self.driver.execute_script(js, ele)
试试这个。ele是元素定位